You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2016/07/14 17:57:17 UTC

[01/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Repository: struts-archetypes
Updated Branches:
  refs/heads/master [created] 3662396ad


http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-blank/src/main/resources/archetype-resources/LICENSE.txt
----------------------------------------------------------------------
diff --git a/struts2-archetype-blank/src/main/resources/archetype-resources/LICENSE.txt b/struts2-archetype-blank/src/main/resources/archetype-resources/LICENSE.txt
new file mode 100644
index 0000000..dd5b3a5
--- /dev/null
+++ b/struts2-archetype-blank/src/main/resources/archetype-resources/LICENSE.txt
@@ -0,0 +1,174 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.


[28/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-001.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-001.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-001.js
new file mode 100644
index 0000000..568867f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-001.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-001",
+  "localeID": "en_001",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-150.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-150.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-150.js
new file mode 100644
index 0000000..0768eb8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-150.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd MMM y h:mm:ss a",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "en-150",
+  "localeID": "en_150",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ag.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ag.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ag.js
new file mode 100644
index 0000000..756d6f2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ag.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ag",
+  "localeID": "en_AG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ai.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ai.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ai.js
new file mode 100644
index 0000000..b400589
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ai.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ai",
+  "localeID": "en_AI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-as.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-as.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-as.js
new file mode 100644
index 0000000..4939e01
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-as.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-as",
+  "localeID": "en_AS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-au.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-au.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-au.js
new file mode 100644
index 0000000..7414041
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-au.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/y h:mm a",
+    "shortDate": "d/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-au",
+  "localeID": "en_AU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bb.js
new file mode 100644
index 0000000..c1fba3a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-bb",
+  "localeID": "en_BB",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-be.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-be.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-be.js
new file mode 100644
index 0000000..6fe24e0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-be.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd MMM y h:mm:ss a",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "en-be",
+  "localeID": "en_BE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bm.js
new file mode 100644
index 0000000..67d117f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-bm",
+  "localeID": "en_BM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bs.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bs.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bs.js
new file mode 100644
index 0000000..c60b8d8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bs.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-bs",
+  "localeID": "en_BS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bw.js
new file mode 100644
index 0000000..6ecf788
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd MMM y h:mm:ss a",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "P",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-bw",
+  "localeID": "en_BW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bz.js
new file mode 100644
index 0000000..3f7379c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-bz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y HH:mm:ss",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-bz",
+  "localeID": "en_BZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ca.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ca.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ca.js
new file mode 100644
index 0000000..0904d0d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ca.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "y-MM-dd h:mm a",
+    "shortDate": "y-MM-dd",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ca",
+  "localeID": "en_CA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cc.js
new file mode 100644
index 0000000..f83123e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cc.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-cc",
+  "localeID": "en_CC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ck.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ck.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ck.js
new file mode 100644
index 0000000..e374bab
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ck.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ck",
+  "localeID": "en_CK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cm.js
new file mode 100644
index 0000000..775d998
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-cm",
+  "localeID": "en_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cx.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cx.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cx.js
new file mode 100644
index 0000000..6b98f3c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-cx.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-cx",
+  "localeID": "en_CX",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dg.js
new file mode 100644
index 0000000..3364710
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-dg",
+  "localeID": "en_DG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dm.js
new file mode 100644
index 0000000..9461a31
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-dm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-dm",
+  "localeID": "en_DM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-er.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-er.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-er.js
new file mode 100644
index 0000000..4a1296c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-er.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-er",
+  "localeID": "en_ER",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fj.js
new file mode 100644
index 0000000..5bf426b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fj.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-fj",
+  "localeID": "en_FJ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fk.js
new file mode 100644
index 0000000..ffb3818
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-fk",
+  "localeID": "en_FK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fm.js
new file mode 100644
index 0000000..33e0e81
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-fm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-fm",
+  "localeID": "en_FM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gb.js
new file mode 100644
index 0000000..a88c820
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gb",
+  "localeID": "en_GB",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[48/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js
new file mode 100644
index 0000000..8e8e41d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js
@@ -0,0 +1,56 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(D,r,Va){'use strict';function ya(a,b,c){if(!a)throw Ka("areq",b||"?",c||"required");return a}function za(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;ba(a)&&(a=a.join(" "));ba(b)&&(b=b.join(" "));return a+" "+b}function La(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function X(a,b,c){var d="";a=ba(a)?a:a&&R(a)&&a.length?a.split(/\s+/):[];s(a,function(a,g){a&&0<a.length&&(d+=0<g?" ":"",d+=c?b+a:a+b)});return d}function Ma(a){if(a instanceof I)switch(a.length){case 0:return[];
+case 1:if(1===a[0].nodeType)return a;break;default:return I(oa(a))}if(1===a.nodeType)return I(a)}function oa(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1==c.nodeType)return c}}function Na(a,b,c){s(b,function(b){a.addClass(b,c)})}function Oa(a,b,c){s(b,function(b){a.removeClass(b,c)})}function U(a){return function(b,c){c.addClass&&(Na(a,b,c.addClass),c.addClass=null);c.removeClass&&(Oa(a,b,c.removeClass),c.removeClass=null)}}function ka(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
+Q;a.domOperation=function(){a.$$domOperationFired=!0;b();b=Q};a.$$prepared=!0}return a}function fa(a,b){Aa(a,b);Ba(a,b)}function Aa(a,b){b.from&&(a.css(b.from),b.from=null)}function Ba(a,b){b.to&&(a.css(b.to),b.to=null)}function V(a,b,c){var d=b.options||{};c=c.options||{};var e=(d.addClass||"")+" "+(c.addClass||""),g=(d.removeClass||"")+" "+(c.removeClass||"");a=Pa(a.attr("class"),e,g);c.preparationClasses&&(d.preparationClasses=ca(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);
+e=d.domOperation!==Q?d.domOperation:null;Ca(d,c);e&&(d.domOperation=e);d.addClass=a.addClass?a.addClass:null;d.removeClass=a.removeClass?a.removeClass:null;b.addClass=d.addClass;b.removeClass=d.removeClass;return d}function Pa(a,b,c){function d(a){R(a)&&(a=a.split(" "));var b={};s(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);s(b,function(a,b){e[b]=1});c=d(c);s(c,function(a,b){e[b]=1===e[b]?null:-1});var g={addClass:"",removeClass:""};s(e,function(b,c){var d,e;1===b?(d="addClass",
+e=!a[c]):-1===b&&(d="removeClass",e=a[c]);e&&(g[d].length&&(g[d]+=" "),g[d]+=c)});return g}function G(a){return a instanceof r.element?a[0]:a}function Qa(a,b,c){var d="";b&&(d=X(b,"ng-",!0));c.addClass&&(d=ca(d,X(c.addClass,"-add")));c.removeClass&&(d=ca(d,X(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function la(a,b){var c=b?"-"+b+"s":"";ha(a,[ia,c]);return[ia,c]}function pa(a,b){var c=b?"paused":"",d=Y+"PlayState";ha(a,[d,c]);return[d,c]}function ha(a,b){a.style[b[0]]=
+b[1]}function ca(a,b){return a?b?a+" "+b:a:b}function Da(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};s(c,function(a,b){var c=e[a];if(c){var C=c.charAt(0);if("-"===C||"+"===C||0<=C)c=Ra(c);0===c&&(c=null);d[b]=c}});return d}function Ra(a){var b=0;a=a.split(/\s*,\s*/);s(a,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function qa(a){return 0===a||null!=a}function Ea(a,b){var c=S,d=a+"s";b?c+="Duration":d+=" linear all";
+return[c,d]}function Fa(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ga(a,b,c){s(c,function(c){a[c]=Z(a[c])?a[c]:b.style.getPropertyValue(c)})}var Q=r.noop,Ha=r.copy,Ca=r.extend,I=r.element,s=r.forEach,ba=r.isArray,R=r.isString,ra=r.isObject,P=r.isUndefined,Z=r.isDefined,Ia=r.isFunction,sa=r.isElement,S,ta,Y,ua;P(D.ontransitionend)&&
+Z(D.onwebkittransitionend)?(S="WebkitTransition",ta="webkitTransitionEnd transitionend"):(S="transition",ta="transitionend");P(D.onanimationend)&&Z(D.onwebkitanimationend)?(Y="WebkitAnimation",ua="webkitAnimationEnd animationend"):(Y="animation",ua="animationend");var ma=Y+"Delay",va=Y+"Duration",ia=S+"Delay";D=S+"Duration";var Ka=r.$$minErr("ng"),Sa={transitionDuration:D,transitionDelay:ia,transitionProperty:S+"Property",animationDuration:va,animationDelay:ma,animationIterationCount:Y+"IterationCount"},
+Ta={transitionDuration:D,transitionDelay:ia,animationDuration:va,animationDelay:ma};r.module("ngAnimate",[]).directive("ngAnimateSwap",["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,d,e,g,H){var A,C;b.$watchCollection(e.ngAnimateSwap||e["for"],function(e){A&&a.leave(A);C&&(C.$destroy(),C=null);if(e||0===e)C=b.$new(),H(C,function(b){A=b;a.enter(b,null,d)})})}}}]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,
+c,d){function e(a){c.data("$$ngAnimateChildren","on"===a||"true"===a)}var g=d.ngAnimateChildren;r.isString(g)&&0===g.length?c.data("$$ngAnimateChildren",!0):(e(a(g)(b)),d.$observe("ngAnimateChildren",e))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),H=0;H<b.length;H++)b[H]();e||a(function(){e||c()})}}var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).provider("$$animateQueue",
+["$animateProvider",function(a){function b(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);s(a,function(a){b[a]=!0});return b}function c(a,c){if(a&&c){var d=b(c);return a.split(" ").some(function(a){return d[a]})}}function d(a,b,c,d){return g[a].some(function(a){return a(b,c,d)})}function e(a,b){var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var g=this.rules={skip:[],cancel:[],join:[]};g.join.push(function(a,b,c){return!b.structural&&e(b)});g.skip.push(function(a,
+b,c){return!b.structural&&!e(b)});g.skip.push(function(a,b,c){return"leave"==c.event&&b.structural});g.skip.push(function(a,b,c){return c.structural&&2===c.state&&!b.structural});g.cancel.push(function(a,b,c){return c.structural&&b.structural});g.cancel.push(function(a,b,c){return 2===c.state&&b.structural});g.cancel.push(function(a,b,d){a=b.addClass;b=b.removeClass;var e=d.addClass;d=d.removeClass;return P(a)&&P(b)||P(e)&&P(d)?!1:c(a,d)||c(b,e)});this.$get=["$$rAF","$rootScope","$rootElement","$document",
+"$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow",function(b,c,g,m,M,r,u,na,v,z){function K(){var a=!1;return function(b){a?b():c.$$postDigest(function(){a=!0;b()})}}function J(a,b,c){var f=G(b),d=G(a),h=[];(a=x[c])&&s(a,function(a){y.call(a.node,f)?h.push(a.callback):"leave"===c&&y.call(a.node,d)&&h.push(a.callback)});return h}function h(a,f,h){function l(c,f,d,h){g(function(){var c=J(y,a,f);c.length&&b(function(){s(c,function(b){b(a,d,h)})})});c.progress(f,
+d,h)}function x(b){var c=a,f=n;f.preparationClasses&&(c.removeClass(f.preparationClasses),f.preparationClasses=null);f.activeClasses&&(c.removeClass(f.activeClasses),f.activeClasses=null);Ja(a,n);fa(a,n);n.domOperation();k.complete(!b)}var n=Ha(h),z,y;if(a=Ma(a))z=G(a),y=a.parent();var n=ka(n),k=new u,g=K();ba(n.addClass)&&(n.addClass=n.addClass.join(" "));n.addClass&&!R(n.addClass)&&(n.addClass=null);ba(n.removeClass)&&(n.removeClass=n.removeClass.join(" "));n.removeClass&&!R(n.removeClass)&&(n.removeClass=
+null);n.from&&!ra(n.from)&&(n.from=null);n.to&&!ra(n.to)&&(n.to=null);if(!z)return x(),k;h=[z.className,n.addClass,n.removeClass].join(" ");if(!Ua(h))return x(),k;var C=0<=["enter","move","leave"].indexOf(f),w=!L||m[0].hidden||E.get(z);h=!w&&B.get(z)||{};var v=!!h.state;w||v&&1==h.state||(w=!q(a,y,f));if(w)return x(),k;C&&xa(a);w={structural:C,element:a,event:f,addClass:n.addClass,removeClass:n.removeClass,close:x,options:n,runner:k};if(v){if(d("skip",a,w,h)){if(2===h.state)return x(),k;V(a,h,w);
+return h.runner}if(d("cancel",a,w,h))if(2===h.state)h.runner.end();else if(h.structural)h.close();else return V(a,h,w),h.runner;else if(d("join",a,w,h))if(2===h.state)V(a,w,{});else return Qa(a,C?f:null,n),f=w.event=h.event,n=V(a,h,w),h.runner}else V(a,w,{});(v=w.structural)||(v="animate"===w.event&&0<Object.keys(w.options.to||{}).length||e(w));if(!v)return x(),N(a),k;var M=(h.counter||0)+1;w.counter=M;t(a,1,w);c.$$postDigest(function(){var b=B.get(z),c=!b,b=b||{},d=0<(a.parent()||[]).length&&("animate"===
+b.event||b.structural||e(b));if(c||b.counter!==M||!d){c&&(Ja(a,n),fa(a,n));if(c||C&&b.event!==f)n.domOperation(),k.end();d||N(a)}else f=!b.structural&&e(b,!0)?"setClass":b.event,t(a,2),b=r(a,f,b.options),b.done(function(b){x(!b);(b=B.get(z))&&b.counter===M&&N(G(a));l(k,f,"close",{})}),k.setHost(b),l(k,f,"start",{})});return k}function xa(a){a=G(a).querySelectorAll("[data-ng-animate]");s(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate")),c=B.get(a);if(c)switch(b){case 2:c.runner.end();
+case 1:B.remove(a)}})}function N(a){a=G(a);a.removeAttribute("data-ng-animate");B.remove(a)}function k(a,b){return G(a)===G(b)}function q(a,b,c){c=I(m[0].body);var f=k(a,c)||"HTML"===a[0].nodeName,d=k(a,g),h=!1,l,e=E.get(G(a));for((a=a.data("$ngAnimatePin"))&&(b=a);b&&b.length;){d||(d=k(b,g));var x=b[0];if(1!==x.nodeType)break;a=B.get(x)||{};if(!h){x=E.get(x);if(!0===x&&!1!==e){e=!0;break}else!1===x&&(e=!1);h=a.structural}if(P(l)||!0===l)a=b.data("$$ngAnimateChildren"),Z(a)&&(l=a);if(h&&!1===l)break;
+f||(f=k(b,c));if(f&&d)break;if(!d&&(a=b.data("$ngAnimatePin"))){b=a;continue}b=b.parent()}return(!h||l)&&!0!==e&&d&&f}function t(a,b,c){c=c||{};c.state=b;a=G(a);a.setAttribute("data-ng-animate",b);c=(b=B.get(a))?Ca(b,c):c;B.put(a,c)}var B=new M,E=new M,L=null,f=c.$watch(function(){return 0===na.totalPendingRequests},function(a){a&&(f(),c.$$postDigest(function(){c.$$postDigest(function(){null===L&&(L=!0)})}))}),x={},l=a.classNameFilter(),Ua=l?function(a){return l.test(a)}:function(){return!0},Ja=U(v),
+y=Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&16)};return{on:function(a,b,c){b=oa(b);x[a]=x[a]||[];x[a].push({node:b,callback:c})},off:function(a,b,c){function f(a,b,c){var d=oa(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback===c))})}var d=x[a];d&&(x[a]=1===arguments.length?null:f(d,b,c))},pin:function(a,b){ya(sa(a),"element","not an element");ya(sa(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,f){c=
+c||{};c.domOperation=f;return h(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!L;else if(sa(a)){var f=G(a),d=E.get(f);1===c?b=!d:E.put(f,!b)}else b=L=!!a;return b}}}]}]).provider("$$animation",["$animateProvider",function(a){function b(a){return a.data("$$animationRunner")}var c=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(a,e,g,H,A,C){function m(a){function b(a){if(a.processed)return a;a.processed=!0;var d=
+a.domNode,N=d.parentNode;e.put(d,a);for(var k;N;){if(k=e.get(N)){k.processed||(k=b(k));break}N=N.parentNode}(k||c).children.push(a);return a}var c={children:[]},d,e=new A;for(d=0;d<a.length;d++){var g=a[d];e.put(g.domNode,a[d]={domNode:g.domNode,fn:g.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var e=0,t=[];for(d=0;d<c.length;d++){var g=c[d];0>=a&&(a=e,e=0,b.push(t),t=[]);t.push(g.fn);g.children.forEach(function(a){e++;
+c.push(a)});a--}t.length&&b.push(t);return b}(c)}var M=[],r=U(a);return function(u,A,v){function z(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];s(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function K(a){var b=[],c={};s(a,function(a,f){var d=G(a.element),h=0<=["enter","move"].indexOf(a.event),d=a.structural?z(d):[];if(d.length){var e=h?"to":"from";s(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||
+{};c[b][e]={animationID:f,element:I(a)}})}else b.push(a)});var d={},h={};s(c,function(c,e){var l=c.from,t=c.to;if(l&&t){var g=a[l.animationID],E=a[t.animationID],k=l.animationID.toString();if(!h[k]){var z=h[k]={structural:!0,beforeStart:function(){g.beforeStart();E.beforeStart()},close:function(){g.close();E.close()},classes:J(g.classes,E.classes),from:g,to:E,anchors:[]};z.classes.length?b.push(z):(b.push(g),b.push(E))}h[k].anchors.push({out:l.element,"in":t.element})}else l=l?l.animationID:t.animationID,
+t=l.toString(),d[t]||(d[t]=!0,b.push(a[l]))});return b}function J(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var h=a[d];if("ng-"!==h.substring(0,3))for(var e=0;e<b.length;e++)if(h===b[e]){c.push(h);break}}return c.join(" ")}function h(a){for(var b=c.length-1;0<=b;b--){var d=c[b];if(g.has(d)&&(d=g.get(d)(a)))return d}}function xa(a,c){a.from&&a.to?(b(a.from.element).setHost(c),b(a.to.element).setHost(c)):b(a.element).setHost(c)}function N(){var a=b(u);!a||"leave"===A&&v.$$domOperationFired||
+a.end()}function k(b){u.off("$destroy",N);u.removeData("$$animationRunner");r(u,v);fa(u,v);v.domOperation();E&&a.removeClass(u,E);u.removeClass("ng-animate");t.complete(!b)}v=ka(v);var q=0<=["enter","move","leave"].indexOf(A),t=new H({end:function(){k()},cancel:function(){k(!0)}});if(!c.length)return k(),t;u.data("$$animationRunner",t);var B=za(u.attr("class"),za(v.addClass,v.removeClass)),E=v.tempClasses;E&&(B+=" "+E,v.tempClasses=null);var L;q&&(L="ng-"+A+"-prepare",a.addClass(u,L));M.push({element:u,
+classes:B,event:A,structural:q,options:v,beforeStart:function(){u.addClass("ng-animate");E&&a.addClass(u,E);L&&(a.removeClass(u,L),L=null)},close:k});u.on("$destroy",N);if(1<M.length)return t;e.$$postDigest(function(){var a=[];s(M,function(c){b(c.element)?a.push(c):c.close()});M.length=0;var c=K(a),d=[];s(c,function(a){d.push({domNode:G(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var c,d=a.close;if(b(a.anchors?a.from.element||a.to.element:a.element)){var f=h(a);f&&(c=f.start)}c?
+(c=c(),c.done(function(a){d(!a)}),xa(a,c)):d()}})});C(m(d))});return t}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Fa(),c=Fa();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,e,g,H,A,C,m,M){function r(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++K))+"-"+a.getAttribute("class")+"-"+b}function u(h,g,z,k){var q;0<b.count(z)&&(q=c.get(z),q||(g=X(g,"-stagger"),
+e.addClass(h,g),q=Da(a,h,k),q.animationDuration=Math.max(q.animationDuration,0),q.transitionDuration=Math.max(q.transitionDuration,0),e.removeClass(h,g),c.put(z,q)));return q||{}}function na(a){J.push(a);m.waitUntilQuiet(function(){b.flush();c.flush();for(var a=A(),d=0;d<J.length;d++)J[d](a);J.length=0})}function v(c,e,g){e=b.get(g);e||(e=Da(a,c,Sa),"infinite"===e.animationIterationCount&&(e.animationIterationCount=1));b.put(g,e);c=e;g=c.animationDelay;e=c.transitionDelay;c.maxDelay=g&&e?Math.max(g,
+e):g||e;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var z=U(e),K=0,J=[];return function(a,c){function d(){q()}function k(){q(!0)}function q(b){if(!(A||wa&&K)){A=!0;K=!1;f.$$skipPreparationClasses||e.removeClass(a,da);e.removeClass(a,ca);pa(l,!1);la(l,!1);s(m,function(a){l.style[a[0]]=""});z(a,f);fa(a,f);Object.keys(x).length&&s(x,function(a,b){a?l.style.setProperty(b,a):l.style.removeProperty(b)});if(f.onDone)f.onDone();ea&&ea.length&&a.off(ea.join(" "),
+E);var c=a.data("$$animateCss");c&&(H.cancel(c[0].timer),a.removeData("$$animateCss"));D&&D.complete(!b)}}function t(a){p.blockTransition&&la(l,a);p.blockKeyframeAnimation&&pa(l,!!a)}function B(){D=new g({end:d,cancel:k});na(Q);q();return{$$willAnimate:!1,start:function(){return D},end:d}}function E(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-U,0)>=P&&b>=O&&(wa=!0,q())}function L(){function b(){if(!A){t(!1);s(m,
+function(a){l.style[a[0]]=a[1]});z(a,f);e.addClass(a,ca);if(p.recalculateTimingStyles){ja=l.className+" "+da;ga=r(l,ja);F=v(l,ja,ga);$=F.maxDelay;n=Math.max($,0);O=F.maxDuration;if(0===O){q();return}p.hasTransitions=0<F.transitionDuration;p.hasAnimations=0<F.animationDuration}p.applyAnimationDelay&&($="boolean"!==typeof f.delay&&qa(f.delay)?parseFloat(f.delay):$,n=Math.max($,0),F.animationDelay=$,aa=[ma,$+"s"],m.push(aa),l.style[aa[0]]=aa[1]);P=1E3*n;R=1E3*O;if(f.easing){var d,g=f.easing;p.hasTransitions&&
+(d=S+"TimingFunction",m.push([d,g]),l.style[d]=g);p.hasAnimations&&(d=Y+"TimingFunction",m.push([d,g]),l.style[d]=g)}F.transitionDuration&&ea.push(ta);F.animationDuration&&ea.push(ua);U=Date.now();var k=P+1.5*R;d=U+k;var g=a.data("$$animateCss")||[],L=!0;if(g.length){var B=g[0];(L=d>B.expectedEndTime)?H.cancel(B.timer):g.push(q)}L&&(k=H(c,k,!1),g[0]={timer:k,expectedEndTime:d},g.push(q),a.data("$$animateCss",g));if(ea.length)a.on(ea.join(" "),E);f.to&&(f.cleanupStyles&&Ga(x,l,Object.keys(f.to)),Ba(a,
+f))}}function c(){var b=a.data("$$animateCss");if(b){for(var d=1;d<b.length;d++)b[d]();a.removeData("$$animateCss")}}if(!A)if(l.parentNode){var d=function(a){if(wa)K&&a&&(K=!1,q());else if(K=!a,F.animationDuration)if(a=pa(l,K),K)m.push(a);else{var b=m,c=b.indexOf(a);0<=a&&b.splice(c,1)}},g=0<Z&&(F.transitionDuration&&0===W.transitionDuration||F.animationDuration&&0===W.animationDuration)&&Math.max(W.animationDelay,W.transitionDelay);g?H(b,Math.floor(g*Z*1E3),!1):b();I.resume=function(){d(!0)};I.pause=
+function(){d(!1)}}else q()}var f=c||{};f.$$prepared||(f=ka(Ha(f)));var x={},l=G(a);if(!l||!l.parentNode||!M.enabled())return B();var m=[],J=a.attr("class"),y=La(f),A,K,wa,D,I,n,P,O,R,U,ea=[];if(0===f.duration||!C.animations&&!C.transitions)return B();var w=f.event&&ba(f.event)?f.event.join(" "):f.event,V="",T="";w&&f.structural?V=X(w,"ng-",!0):w&&(V=w);f.addClass&&(T+=X(f.addClass,"-add"));f.removeClass&&(T.length&&(T+=" "),T+=X(f.removeClass,"-remove"));f.applyClassesEarly&&T.length&&z(a,f);var da=
+[V,T].join(" ").trim(),ja=J+" "+da,ca=X(da,"-active"),J=y.to&&0<Object.keys(y.to).length;if(!(0<(f.keyframeStyle||"").length||J||da))return B();var ga,W;0<f.stagger?(y=parseFloat(f.stagger),W={transitionDelay:y,animationDelay:y,transitionDuration:0,animationDuration:0}):(ga=r(l,ja),W=u(l,da,ga,Ta));f.$$skipPreparationClasses||e.addClass(a,da);f.transitionStyle&&(y=[S,f.transitionStyle],ha(l,y),m.push(y));0<=f.duration&&(y=0<l.style[S].length,y=Ea(f.duration,y),ha(l,y),m.push(y));f.keyframeStyle&&
+(y=[Y,f.keyframeStyle],ha(l,y),m.push(y));var Z=W?0<=f.staggerIndex?f.staggerIndex:b.count(ga):0;(w=0===Z)&&!f.skipBlocking&&la(l,9999);var F=v(l,ja,ga),$=F.maxDelay;n=Math.max($,0);O=F.maxDuration;var p={};p.hasTransitions=0<F.transitionDuration;p.hasAnimations=0<F.animationDuration;p.hasTransitionAll=p.hasTransitions&&"all"==F.transitionProperty;p.applyTransitionDuration=J&&(p.hasTransitions&&!p.hasTransitionAll||p.hasAnimations&&!p.hasTransitions);p.applyAnimationDuration=f.duration&&p.hasAnimations;
+p.applyTransitionDelay=qa(f.delay)&&(p.applyTransitionDuration||p.hasTransitions);p.applyAnimationDelay=qa(f.delay)&&p.hasAnimations;p.recalculateTimingStyles=0<T.length;if(p.applyTransitionDuration||p.applyAnimationDuration)O=f.duration?parseFloat(f.duration):O,p.applyTransitionDuration&&(p.hasTransitions=!0,F.transitionDuration=O,y=0<l.style[S+"Property"].length,m.push(Ea(O,y))),p.applyAnimationDuration&&(p.hasAnimations=!0,F.animationDuration=O,m.push([va,O+"s"]));if(0===O&&!p.recalculateTimingStyles)return B();
+if(null!=f.delay){var aa;"boolean"!==typeof f.delay&&(aa=parseFloat(f.delay),n=Math.max(aa,0));p.applyTransitionDelay&&m.push([ia,aa+"s"]);p.applyAnimationDelay&&m.push([ma,aa+"s"])}null==f.duration&&0<F.transitionDuration&&(p.recalculateTimingStyles=p.recalculateTimingStyles||w);P=1E3*n;R=1E3*O;f.skipBlocking||(p.blockTransition=0<F.transitionDuration,p.blockKeyframeAnimation=0<F.animationDuration&&0<W.animationDelay&&0===W.animationDuration);f.from&&(f.cleanupStyles&&Ga(x,l,Object.keys(f.from)),
+Aa(a,f));p.blockTransition||p.blockKeyframeAnimation?t(O):f.skipBlocking||la(l,!1);return{$$willAnimate:!0,end:d,start:function(){if(!A)return I={end:d,cancel:k,resume:null,pause:null},D=new g(I),na(L),D}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,g,H,A){function C(a){return a.replace(/\bng-\S+\b/g,"")}function m(a,
+b){R(a)&&(a=a.split(" "));R(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function M(c,e,g){function h(a){var b={},c=G(a).getBoundingClientRect();s(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=D.scrollTop;break;case "left":d+=D.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function A(){var c=C(g.attr("class")||""),d=m(c,q),c=m(q,c),d=a(k,{to:h(g),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?
+d:null}function H(){k.remove();e.removeClass("ng-animate-shim");g.removeClass("ng-animate-shim")}var k=I(G(e).cloneNode(!0)),q=C(k.attr("class")||"");e.addClass("ng-animate-shim");g.addClass("ng-animate-shim");k.addClass("ng-anchor");v.append(k);var t;c=function(){var c=a(k,{addClass:"ng-anchor-out",delay:!0,from:h(e)});return c.$$willAnimate?c:null}();if(!c&&(t=A(),!t))return H();var B=c||t;return{start:function(){function a(){c&&c.end()}var b,c=B.start();c.done(function(){c=null;if(!t&&(t=A()))return c=
+t.start(),c.done(function(){c=null;H();b.complete()}),c;H();b.complete()});return b=new d({end:a,cancel:a})}}}function r(a,b,c,e){var g=u(a,Q),m=u(b,Q),k=[];s(e,function(a){(a=M(c,a.out,a["in"]))&&k.push(a)});if(g||m||0!==k.length)return{start:function(){function a(){s(b,function(a){a.end()})}var b=[];g&&b.push(g.start());m&&b.push(m.start());s(k,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function u(c){var d=c.element,e=c.options||
+{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone=e.domOperation));e.preparationClasses&&(e.event=ca(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!g.animations&&!g.transitions)return Q;var D=A[0].body;c=G(e);var v=I(c.parentNode&&11===c.parentNode.nodeType||D.contains(c)?c:D);U(H);return function(a){return a.from&&a.to?r(a.from,a.to,a.classes,a.anchors):u(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=
+["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=ba(c)?c:c.split(" ");for(var d=[],e={},g=0;g<c.length;g++){var s=c[g],r=a.$$registeredAnimations[s];r&&!e[s]&&(d.push(b.get(r)),e[s]=!0)}return d}var g=U(d);return function(a,b,d,m){function r(){m.domOperation();g(a,m)}function D(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,z,K,f];break;case "addClass":b=[b,z,f];break;case "removeClass":b=[b,K,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,
+b))if(Ia(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Ia(a))return a;return Q}function u(a,b,d,e,f){var g=[];s(e,function(e){var h=e[f];h&&g.push(function(){var e,f,g=!1,k=function(a){g||(g=!0,(f||Q)(a),e.complete(!a))};e=new c({end:function(){k()},cancel:function(){k(!0)}});f=D(h,a,b,d,function(a){k(!1===a)});return e})});return g}function G(a,b,d,e,f){var g=u(a,b,d,e,f);if(0===g.length){var h,k;"beforeSetClass"===f?(h=u(a,"removeClass",d,e,"beforeRemoveClass"),k=u(a,"addClass",d,e,"beforeAddClass")):
+"setClass"===f&&(h=u(a,"removeClass",d,e,"removeClass"),k=u(a,"addClass",d,e,"addClass"));h&&(g=g.concat(h));k&&(g=g.concat(k))}if(0!==g.length)return function(a){var b=[];g.length&&s(g,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){s(b,function(b){a?b.cancel():b.end()})}}}var v=!1;3===arguments.length&&ra(d)&&(m=d,d=null);m=ka(m);d||(d=a.attr("class")||"",m.addClass&&(d+=" "+m.addClass),m.removeClass&&(d+=" "+m.removeClass));var z=m.addClass,K=m.removeClass,J=e(d),h,I;if(J.length){var N,
+k;"leave"==b?(k="leave",N="afterLeave"):(k="before"+b.charAt(0).toUpperCase()+b.substr(1),N=b);"enter"!==b&&"move"!==b&&(h=G(a,b,m,J,k));I=G(a,b,m,J,N)}if(h||I){var q;return{$$willAnimate:!0,end:function(){q?q.end():(v=!0,r(),fa(a,m),q=new c,q.complete(!0));return q},start:function(){function b(c){v=!0;r();fa(a,m);q.complete(c)}if(q)return q;q=new c;var d,e=[];h&&e.push(function(a){d=h(a)});e.length?e.push(function(a){r();a(!0)}):r();I&&e.push(function(a){d=I(a)});q.setHost({end:function(){v||((d||
+Q)(void 0),b(void 0))},cancel:function(){v||((d||Q)(!0),b(!0))}});c.chain(e,b);return q}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),r=d(a.to);if(b||r)return{start:function(){function a(){return function(){s(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());r&&
+d.push(r.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular);
+//# sourceMappingURL=angular-animate.min.js.map


[41/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js
new file mode 100644
index 0000000..4d0d018
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js
@@ -0,0 +1,15 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(r,d,C){'use strict';function x(s,h,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,y){function k(){n&&(g.cancel(n),n=null);l&&(l.$destroy(),l=null);m&&(n=g.leave(m),n.then(function(){n=null}),m=null)}function z(){var b=s.current&&s.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),f=s.current;m=y(b,function(b){g.enter(b,null,m||c).then(function(){!d.isDefined(u)||u&&!a.$eval(u)||h()});k()});l=f.scope=b;l.$emit("$viewContentLoaded");
+l.$eval(v)}else k()}var l,m,n,u=b.autoscroll,v=b.onload||"";a.$on("$routeChangeSuccess",z);z()}}}function A(d,h,g){return{restrict:"ECA",priority:-400,link:function(a,c){var b=g.current,f=b.locals;c.html(f.$template);var y=d(c.contents());if(b.controller){f.$scope=a;var k=h(b.controller,f);b.controllerAs&&(a[b.controllerAs]=k);c.data("$ngControllerController",k);c.children().data("$ngControllerController",k)}a[b.resolveAs||"$resolve"]=f;y(a)}}}r=d.module("ngRoute",["ng"]).provider("$route",function(){function s(a,
+c){return d.extend(Object.create(a),c)}function h(a,d){var b=d.caseInsensitiveMatch,f={originalPath:a,regexp:a},g=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,d,b,c){a="?"===c?c:null;c="*"===c?c:null;g.push({name:b,optional:!!a});d=d||"";return""+(a?"":d)+"(?:"+(a?d:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=new RegExp("^"+a+"$",b?"i":"");return f}var g={};this.when=function(a,c){var b=d.copy(c);d.isUndefined(b.reloadOnSearch)&&
+(b.reloadOnSearch=!0);d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);g[a]=d.extend(b,a&&h(a,b));if(a){var f="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";g[f]=d.extend({redirectTo:a},h(f,b))}return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce",function(a,c,b,f,h,k,r){function l(b){var e=
+t.current;(x=(p=n())&&e&&p.$$route===e.$$route&&d.equals(p.pathParams,e.pathParams)&&!p.reloadOnSearch&&!v)||!e&&!p||a.$broadcast("$routeChangeStart",p,e).defaultPrevented&&b&&b.preventDefault()}function m(){var w=t.current,e=p;if(x)w.params=e.params,d.copy(w.params,b),a.$broadcast("$routeUpdate",w);else if(e||w)v=!1,(t.current=e)&&e.redirectTo&&(d.isString(e.redirectTo)?c.path(u(e.redirectTo,e.params)).search(e.params).replace():c.url(e.redirectTo(e.pathParams,c.path(),c.search())).replace()),f.when(e).then(function(){if(e){var a=
+d.extend({},e.resolve),b,c;d.forEach(a,function(b,e){a[e]=d.isString(b)?h.get(b):h.invoke(b,null,null,e)});d.isDefined(b=e.template)?d.isFunction(b)&&(b=b(e.params)):d.isDefined(c=e.templateUrl)&&(d.isFunction(c)&&(c=c(e.params)),d.isDefined(c)&&(e.loadedTemplateUrl=r.valueOf(c),b=k(c)));d.isDefined(b)&&(a.$template=b);return f.all(a)}}).then(function(c){e==t.current&&(e&&(e.locals=c,d.copy(e.params,b)),a.$broadcast("$routeChangeSuccess",e,w))},function(b){e==t.current&&a.$broadcast("$routeChangeError",
+e,w,b)})}function n(){var a,b;d.forEach(g,function(f,g){var q;if(q=!b){var h=c.path();q=f.keys;var l={};if(f.regexp)if(h=f.regexp.exec(h)){for(var k=1,n=h.length;k<n;++k){var m=q[k-1],p=h[k];m&&p&&(l[m.name]=p)}q=l}else q=null;else q=null;q=a=q}q&&(b=s(f,{params:d.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||g[null]&&s(g[null],{params:{},pathParams:{}})}function u(a,b){var c=[];d.forEach((a||"").split(":"),function(a,d){if(0===d)c.push(a);else{var f=a.match(/(\w+)(?:[?*])?(.*)/),
+g=f[1];c.push(b[g]);c.push(f[2]||"");delete b[g]}});return c.join("")}var v=!1,p,x,t={routes:g,reload:function(){v=!0;var b={defaultPrevented:!1,preventDefault:function(){this.defaultPrevented=!0;v=!1}};a.$evalAsync(function(){l(b);b.defaultPrevented||m()})},updateParams:function(a){if(this.current&&this.current.$$route)a=d.extend({},this.current.params,a),c.path(u(this.current.$$route.originalPath,a)),c.search(a);else throw B("norout");}};a.$on("$locationChangeStart",l);a.$on("$locationChangeSuccess",
+m);return t}]});var B=d.$$minErr("ngRoute");r.provider("$routeParams",function(){this.$get=function(){return{}}});r.directive("ngView",x);r.directive("ngView",A);x.$inject=["$route","$anchorScroll","$animate"];A.$inject=["$compile","$controller","$route"]})(window,window.angular);
+//# sourceMappingURL=angular-route.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js.map
new file mode 100644
index 0000000..fb5cffc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-route.min.js",
+"lineCount":14,
+"mappings":"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",
+"sources":["angular-route.js"],
+"names":["window","angular","undefined","ngViewFactory","$route","$anchorScroll","$animate","restrict","terminal","priority","transclude","link","scope","$element","attr","ctrl","$transclude","cleanupLastView","previousLeaveAnimation","cancel","currentScope","$destroy","currentElement","leave","then","update","locals","current","isDefined","$template","newScope","$new","clone","enter","onNgViewEnter","autoScrollExp","$eval","$emit","onloadExp","autoscroll","onload","$on","ngViewFillContentFactory","$compile","$controller","html","contents","controller","$scope","controllerAs","data","children","resolveAs","ngRouteModule","module","provider","$RouteProvider","inherit","parent","extra","extend","Object","create","pathRegExp","path","opts","insensitive","caseInsensitiveMatch","ret","originalPath","regexp","keys","replace","_","slash","key","option","optional","star","push","name","RegExp","routes","when","this.when","route","routeCopy","copy","isUndefined","reloadOnSearch","redirectPat
 h","length","substr","redirectTo","otherwise","this.otherwise","params","$get","$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce","prepareRoute","$locationEvent","lastRoute","preparedRouteIsUpdateOnly","preparedRoute","parseRoute","$$route","equals","pathParams","forceReload","$broadcast","defaultPrevented","preventDefault","commitRoute","nextRoute","isString","interpolate","search","url","resolve","template","templateUrl","forEach","value","get","invoke","isFunction","loadedTemplateUrl","valueOf","all","error","match","m","exec","on","i","len","val","string","result","split","segment","segmentMatch","join","reload","fakeLocationEvent","fakePreventDefault","$evalAsync","updateParams","newParams","$routeMinErr","$$minErr","$RouteParamsProvider","this.$get","directive","$inject"]
+}

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.js
new file mode 100644
index 0000000..8b610c7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.js
@@ -0,0 +1,717 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+var $sanitizeMinErr = angular.$$minErr('$sanitize');
+
+/**
+ * @ngdoc module
+ * @name ngSanitize
+ * @description
+ *
+ * # ngSanitize
+ *
+ * The `ngSanitize` module provides functionality to sanitize HTML.
+ *
+ *
+ * <div doc-module-components="ngSanitize"></div>
+ *
+ * See {@link ngSanitize.$sanitize `$sanitize`} for usage.
+ */
+
+/**
+ * @ngdoc service
+ * @name $sanitize
+ * @kind function
+ *
+ * @description
+ *   Sanitizes an html string by stripping all potentially dangerous tokens.
+ *
+ *   The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
+ *   then serialized back to properly escaped html string. This means that no unsafe input can make
+ *   it into the returned string.
+ *
+ *   The whitelist for URL sanitization of attribute values is configured using the functions
+ *   `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider
+ *   `$compileProvider`}.
+ *
+ *   The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.
+ *
+ * @param {string} html HTML input.
+ * @returns {string} Sanitized HTML.
+ *
+ * @example
+   <example module="sanitizeExample" deps="angular-sanitize.js">
+   <file name="index.html">
+     <script>
+         angular.module('sanitizeExample', ['ngSanitize'])
+           .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
+             $scope.snippet =
+               '<p style="color:blue">an html\n' +
+               '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
+               'snippet</p>';
+             $scope.deliberatelyTrustDangerousSnippet = function() {
+               return $sce.trustAsHtml($scope.snippet);
+             };
+           }]);
+     </script>
+     <div ng-controller="ExampleController">
+        Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+       <table>
+         <tr>
+           <td>Directive</td>
+           <td>How</td>
+           <td>Source</td>
+           <td>Rendered</td>
+         </tr>
+         <tr id="bind-html-with-sanitize">
+           <td>ng-bind-html</td>
+           <td>Automatically uses $sanitize</td>
+           <td><pre>&lt;div ng-bind-html="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
+           <td><div ng-bind-html="snippet"></div></td>
+         </tr>
+         <tr id="bind-html-with-trust">
+           <td>ng-bind-html</td>
+           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>
+           <td>
+           <pre>&lt;div ng-bind-html="deliberatelyTrustDangerousSnippet()"&gt;
+&lt;/div&gt;</pre>
+           </td>
+           <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
+         </tr>
+         <tr id="bind-default">
+           <td>ng-bind</td>
+           <td>Automatically escapes</td>
+           <td><pre>&lt;div ng-bind="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
+           <td><div ng-bind="snippet"></div></td>
+         </tr>
+       </table>
+       </div>
+   </file>
+   <file name="protractor.js" type="protractor">
+     it('should sanitize the html snippet by default', function() {
+       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+         toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
+     });
+
+     it('should inline raw snippet if bound to a trusted value', function() {
+       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
+         toBe("<p style=\"color:blue\">an html\n" +
+              "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
+              "snippet</p>");
+     });
+
+     it('should escape snippet without any filter', function() {
+       expect(element(by.css('#bind-default div')).getInnerHtml()).
+         toBe("&lt;p style=\"color:blue\"&gt;an html\n" +
+              "&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" +
+              "snippet&lt;/p&gt;");
+     });
+
+     it('should update', function() {
+       element(by.model('snippet')).clear();
+       element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
+       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+         toBe('new <b>text</b>');
+       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
+         'new <b onclick="alert(1)">text</b>');
+       expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
+         "new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;");
+     });
+   </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc provider
+ * @name $sanitizeProvider
+ *
+ * @description
+ * Creates and configures {@link $sanitize} instance.
+ */
+function $SanitizeProvider() {
+  var svgEnabled = false;
+
+  this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
+    if (svgEnabled) {
+      angular.extend(validElements, svgElements);
+    }
+    return function(html) {
+      var buf = [];
+      htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
+        return !/^unsafe:/.test($$sanitizeUri(uri, isImage));
+      }));
+      return buf.join('');
+    };
+  }];
+
+
+  /**
+   * @ngdoc method
+   * @name $sanitizeProvider#enableSvg
+   * @kind function
+   *
+   * @description
+   * Enables a subset of svg to be supported by the sanitizer.
+   *
+   * <div class="alert alert-warning">
+   *   <p>By enabling this setting without taking other precautions, you might expose your
+   *   application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned
+   *   outside of the containing element and be rendered over other elements on the page (e.g. a login
+   *   link). Such behavior can then result in phishing incidents.</p>
+   *
+   *   <p>To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg
+   *   tags within the sanitized content:</p>
+   *
+   *   <br>
+   *
+   *   <pre><code>
+   *   .rootOfTheIncludedContent svg {
+   *     overflow: hidden !important;
+   *   }
+   *   </code></pre>
+   * </div>
+   *
+   * @param {boolean=} regexp New regexp to whitelist urls with.
+   * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called
+   *    without an argument or self for chaining otherwise.
+   */
+  this.enableSvg = function(enableSvg) {
+    if (angular.isDefined(enableSvg)) {
+      svgEnabled = enableSvg;
+      return this;
+    } else {
+      return svgEnabled;
+    }
+  };
+}
+
+function sanitizeText(chars) {
+  var buf = [];
+  var writer = htmlSanitizeWriter(buf, angular.noop);
+  writer.chars(chars);
+  return buf.join('');
+}
+
+
+// Regular Expressions for parsing tags and attributes
+var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+  // Match everything outside of normal chars and " (quote character)
+  NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
+
+
+// Good source of info about elements and attributes
+// http://dev.w3.org/html5/spec/Overview.html#semantics
+// http://simon.html5.org/html-elements
+
+// Safe Void Elements - HTML5
+// http://dev.w3.org/html5/spec/Overview.html#void-elements
+var voidElements = toMap("area,br,col,hr,img,wbr");
+
+// Elements that you can, intentionally, leave open (and which close themselves)
+// http://dev.w3.org/html5/spec/Overview.html#optional-tags
+var optionalEndTagBlockElements = toMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
+    optionalEndTagInlineElements = toMap("rp,rt"),
+    optionalEndTagElements = angular.extend({},
+                                            optionalEndTagInlineElements,
+                                            optionalEndTagBlockElements);
+
+// Safe Block Elements - HTML5
+var blockElements = angular.extend({}, optionalEndTagBlockElements, toMap("address,article," +
+        "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," +
+        "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul"));
+
+// Inline Elements - HTML5
+var inlineElements = angular.extend({}, optionalEndTagInlineElements, toMap("a,abbr,acronym,b," +
+        "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
+        "samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
+
+// SVG Elements
+// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
+// Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.
+// They can potentially allow for arbitrary javascript to be executed. See #11290
+var svgElements = toMap("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph," +
+        "hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline," +
+        "radialGradient,rect,stop,svg,switch,text,title,tspan");
+
+// Blocked Elements (will be stripped)
+var blockedElements = toMap("script,style");
+
+var validElements = angular.extend({},
+                                   voidElements,
+                                   blockElements,
+                                   inlineElements,
+                                   optionalEndTagElements);
+
+//Attributes that have href and hence need to be sanitized
+var uriAttrs = toMap("background,cite,href,longdesc,src,xlink:href");
+
+var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
+    'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
+    'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
+    'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
+    'valign,value,vspace,width');
+
+// SVG attributes (without "id" and "name" attributes)
+// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
+var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
+    'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +
+    'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +
+    'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +
+    'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +
+    'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +
+    'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +
+    'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +
+    'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +
+    'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +
+    'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +
+    'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +
+    'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +
+    'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +
+    'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);
+
+var validAttrs = angular.extend({},
+                                uriAttrs,
+                                svgAttrs,
+                                htmlAttrs);
+
+function toMap(str, lowercaseKeys) {
+  var obj = {}, items = str.split(','), i;
+  for (i = 0; i < items.length; i++) {
+    obj[lowercaseKeys ? angular.lowercase(items[i]) : items[i]] = true;
+  }
+  return obj;
+}
+
+var inertBodyElement;
+(function(window) {
+  var doc;
+  if (window.document && window.document.implementation) {
+    doc = window.document.implementation.createHTMLDocument("inert");
+  } else {
+    throw $sanitizeMinErr('noinert', "Can't create an inert html document");
+  }
+  var docElement = doc.documentElement || doc.getDocumentElement();
+  var bodyElements = docElement.getElementsByTagName('body');
+
+  // usually there should be only one body element in the document, but IE doesn't have any, so we need to create one
+  if (bodyElements.length === 1) {
+    inertBodyElement = bodyElements[0];
+  } else {
+    var html = doc.createElement('html');
+    inertBodyElement = doc.createElement('body');
+    html.appendChild(inertBodyElement);
+    doc.appendChild(html);
+  }
+})(window);
+
+/**
+ * @example
+ * htmlParser(htmlString, {
+ *     start: function(tag, attrs) {},
+ *     end: function(tag) {},
+ *     chars: function(text) {},
+ *     comment: function(text) {}
+ * });
+ *
+ * @param {string} html string
+ * @param {object} handler
+ */
+function htmlParser(html, handler) {
+  if (html === null || html === undefined) {
+    html = '';
+  } else if (typeof html !== 'string') {
+    html = '' + html;
+  }
+  inertBodyElement.innerHTML = html;
+
+  //mXSS protection
+  var mXSSAttempts = 5;
+  do {
+    if (mXSSAttempts === 0) {
+      throw $sanitizeMinErr('uinput', "Failed to sanitize html because the input is unstable");
+    }
+    mXSSAttempts--;
+
+    // strip custom-namespaced attributes on IE<=11
+    if (document.documentMode <= 11) {
+      stripCustomNsAttrs(inertBodyElement);
+    }
+    html = inertBodyElement.innerHTML; //trigger mXSS
+    inertBodyElement.innerHTML = html;
+  } while (html !== inertBodyElement.innerHTML);
+
+  var node = inertBodyElement.firstChild;
+  while (node) {
+    switch (node.nodeType) {
+      case 1: // ELEMENT_NODE
+        handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));
+        break;
+      case 3: // TEXT NODE
+        handler.chars(node.textContent);
+        break;
+    }
+
+    var nextNode;
+    if (!(nextNode = node.firstChild)) {
+      if (node.nodeType == 1) {
+        handler.end(node.nodeName.toLowerCase());
+      }
+      nextNode = node.nextSibling;
+      if (!nextNode) {
+        while (nextNode == null) {
+          node = node.parentNode;
+          if (node === inertBodyElement) break;
+          nextNode = node.nextSibling;
+          if (node.nodeType == 1) {
+            handler.end(node.nodeName.toLowerCase());
+          }
+        }
+      }
+    }
+    node = nextNode;
+  }
+
+  while (node = inertBodyElement.firstChild) {
+    inertBodyElement.removeChild(node);
+  }
+}
+
+function attrToMap(attrs) {
+  var map = {};
+  for (var i = 0, ii = attrs.length; i < ii; i++) {
+    var attr = attrs[i];
+    map[attr.name] = attr.value;
+  }
+  return map;
+}
+
+
+/**
+ * Escapes all potentially dangerous characters, so that the
+ * resulting string can be safely inserted into attribute or
+ * element text.
+ * @param value
+ * @returns {string} escaped text
+ */
+function encodeEntities(value) {
+  return value.
+    replace(/&/g, '&amp;').
+    replace(SURROGATE_PAIR_REGEXP, function(value) {
+      var hi = value.charCodeAt(0);
+      var low = value.charCodeAt(1);
+      return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
+    }).
+    replace(NON_ALPHANUMERIC_REGEXP, function(value) {
+      return '&#' + value.charCodeAt(0) + ';';
+    }).
+    replace(/</g, '&lt;').
+    replace(/>/g, '&gt;');
+}
+
+/**
+ * create an HTML/XML writer which writes to buffer
+ * @param {Array} buf use buf.join('') to get out sanitized html string
+ * @returns {object} in the form of {
+ *     start: function(tag, attrs) {},
+ *     end: function(tag) {},
+ *     chars: function(text) {},
+ *     comment: function(text) {}
+ * }
+ */
+function htmlSanitizeWriter(buf, uriValidator) {
+  var ignoreCurrentElement = false;
+  var out = angular.bind(buf, buf.push);
+  return {
+    start: function(tag, attrs) {
+      tag = angular.lowercase(tag);
+      if (!ignoreCurrentElement && blockedElements[tag]) {
+        ignoreCurrentElement = tag;
+      }
+      if (!ignoreCurrentElement && validElements[tag] === true) {
+        out('<');
+        out(tag);
+        angular.forEach(attrs, function(value, key) {
+          var lkey=angular.lowercase(key);
+          var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
+          if (validAttrs[lkey] === true &&
+            (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
+            out(' ');
+            out(key);
+            out('="');
+            out(encodeEntities(value));
+            out('"');
+          }
+        });
+        out('>');
+      }
+    },
+    end: function(tag) {
+      tag = angular.lowercase(tag);
+      if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {
+        out('</');
+        out(tag);
+        out('>');
+      }
+      if (tag == ignoreCurrentElement) {
+        ignoreCurrentElement = false;
+      }
+    },
+    chars: function(chars) {
+      if (!ignoreCurrentElement) {
+        out(encodeEntities(chars));
+      }
+    }
+  };
+}
+
+
+/**
+ * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare
+ * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want
+ * to allow any of these custom attributes. This method strips them all.
+ *
+ * @param node Root element to process
+ */
+function stripCustomNsAttrs(node) {
+  if (node.nodeType === Node.ELEMENT_NODE) {
+    var attrs = node.attributes;
+    for (var i = 0, l = attrs.length; i < l; i++) {
+      var attrNode = attrs[i];
+      var attrName = attrNode.name.toLowerCase();
+      if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {
+        node.removeAttributeNode(attrNode);
+        i--;
+        l--;
+      }
+    }
+  }
+
+  var nextNode = node.firstChild;
+  if (nextNode) {
+    stripCustomNsAttrs(nextNode);
+  }
+
+  nextNode = node.nextSibling;
+  if (nextNode) {
+    stripCustomNsAttrs(nextNode);
+  }
+}
+
+
+
+// define ngSanitize module and register $sanitize service
+angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
+
+/* global sanitizeText: false */
+
+/**
+ * @ngdoc filter
+ * @name linky
+ * @kind function
+ *
+ * @description
+ * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and
+ * plain email address links.
+ *
+ * Requires the {@link ngSanitize `ngSanitize`} module to be installed.
+ *
+ * @param {string} text Input text.
+ * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.
+ * @param {object|function(url)} [attributes] Add custom attributes to the link element.
+ *
+ *    Can be one of:
+ *
+ *    - `object`: A map of attributes
+ *    - `function`: Takes the url as a parameter and returns a map of attributes
+ *
+ *    If the map of attributes contains a value for `target`, it overrides the value of
+ *    the target parameter.
+ *
+ *
+ * @returns {string} Html-linkified and {@link $sanitize sanitized} text.
+ *
+ * @usage
+   <span ng-bind-html="linky_expression | linky"></span>
+ *
+ * @example
+   <example module="linkyExample" deps="angular-sanitize.js">
+     <file name="index.html">
+       <div ng-controller="ExampleController">
+       Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+       <table>
+         <tr>
+           <th>Filter</th>
+           <th>Source</th>
+           <th>Rendered</th>
+         </tr>
+         <tr id="linky-filter">
+           <td>linky filter</td>
+           <td>
+             <pre>&lt;div ng-bind-html="snippet | linky"&gt;<br>&lt;/div&gt;</pre>
+           </td>
+           <td>
+             <div ng-bind-html="snippet | linky"></div>
+           </td>
+         </tr>
+         <tr id="linky-target">
+          <td>linky target</td>
+          <td>
+            <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
+          </td>
+          <td>
+            <div ng-bind-html="snippetWithSingleURL | linky:'_blank'"></div>
+          </td>
+         </tr>
+         <tr id="linky-custom-attributes">
+          <td>linky custom attributes</td>
+          <td>
+            <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"&gt;<br>&lt;/div&gt;</pre>
+          </td>
+          <td>
+            <div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"></div>
+          </td>
+         </tr>
+         <tr id="escaped-html">
+           <td>no filter</td>
+           <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td>
+           <td><div ng-bind="snippet"></div></td>
+         </tr>
+       </table>
+     </file>
+     <file name="script.js">
+       angular.module('linkyExample', ['ngSanitize'])
+         .controller('ExampleController', ['$scope', function($scope) {
+           $scope.snippet =
+             'Pretty text with some links:\n'+
+             'http://angularjs.org/,\n'+
+             'mailto:us@somewhere.org,\n'+
+             'another@somewhere.org,\n'+
+             'and one more: ftp://127.0.0.1/.';
+           $scope.snippetWithSingleURL = 'http://angularjs.org/';
+         }]);
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should linkify the snippet with urls', function() {
+         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
+             toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +
+                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');
+         expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
+       });
+
+       it('should not linkify snippet without the linky filter', function() {
+         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
+             toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +
+                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');
+         expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
+       });
+
+       it('should update', function() {
+         element(by.model('snippet')).clear();
+         element(by.model('snippet')).sendKeys('new http://link.');
+         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
+             toBe('new http://link.');
+         expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
+         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
+             .toBe('new http://link.');
+       });
+
+       it('should work with the target property', function() {
+        expect(element(by.id('linky-target')).
+            element(by.binding("snippetWithSingleURL | linky:'_blank'")).getText()).
+            toBe('http://angularjs.org/');
+        expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
+       });
+
+       it('should optionally add custom attributes', function() {
+        expect(element(by.id('linky-custom-attributes')).
+            element(by.binding("snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}")).getText()).
+            toBe('http://angularjs.org/');
+        expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');
+       });
+     </file>
+   </example>
+ */
+angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
+  var LINKY_URL_REGEXP =
+        /((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
+      MAILTO_REGEXP = /^mailto:/i;
+
+  var linkyMinErr = angular.$$minErr('linky');
+  var isString = angular.isString;
+
+  return function(text, target, attributes) {
+    if (text == null || text === '') return text;
+    if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);
+
+    var match;
+    var raw = text;
+    var html = [];
+    var url;
+    var i;
+    while ((match = raw.match(LINKY_URL_REGEXP))) {
+      // We can not end in these as they are sometimes found at the end of the sentence
+      url = match[0];
+      // if we did not match ftp/http/www/mailto then assume mailto
+      if (!match[2] && !match[4]) {
+        url = (match[3] ? 'http://' : 'mailto:') + url;
+      }
+      i = match.index;
+      addText(raw.substr(0, i));
+      addLink(url, match[0].replace(MAILTO_REGEXP, ''));
+      raw = raw.substring(i + match[0].length);
+    }
+    addText(raw);
+    return $sanitize(html.join(''));
+
+    function addText(text) {
+      if (!text) {
+        return;
+      }
+      html.push(sanitizeText(text));
+    }
+
+    function addLink(url, text) {
+      var key;
+      html.push('<a ');
+      if (angular.isFunction(attributes)) {
+        attributes = attributes(url);
+      }
+      if (angular.isObject(attributes)) {
+        for (key in attributes) {
+          html.push(key + '="' + attributes[key] + '" ');
+        }
+      } else {
+        attributes = {};
+      }
+      if (angular.isDefined(target) && !('target' in attributes)) {
+        html.push('target="',
+                  target,
+                  '" ');
+      }
+      html.push('href="',
+                url.replace(/"/g, '&quot;'),
+                '">');
+      addText(text);
+      html.push('</a>');
+    }
+  };
+}]);
+
+
+})(window, window.angular);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js
new file mode 100644
index 0000000..135d5a0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js
@@ -0,0 +1,15 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(A,e,B){'use strict';function C(a){var c=[];v(c,e.noop).chars(a);return c.join("")}function h(a,c){var b={},d=a.split(","),l;for(l=0;l<d.length;l++)b[c?e.lowercase(d[l]):d[l]]=!0;return b}function D(a,c){null===a||a===B?a="":"string"!==typeof a&&(a=""+a);g.innerHTML=a;var b=5;do{if(0===b)throw w("uinput");b--;11>=document.documentMode&&n(g);a=g.innerHTML;g.innerHTML=a}while(a!==g.innerHTML);for(b=g.firstChild;b;){switch(b.nodeType){case 1:c.start(b.nodeName.toLowerCase(),E(b.attributes));
+break;case 3:c.chars(b.textContent)}var d;if(!(d=b.firstChild)&&(1==b.nodeType&&c.end(b.nodeName.toLowerCase()),d=b.nextSibling,!d))for(;null==d;){b=b.parentNode;if(b===g)break;d=b.nextSibling;1==b.nodeType&&c.end(b.nodeName.toLowerCase())}b=d}for(;b=g.firstChild;)g.removeChild(b)}function E(a){for(var c={},b=0,d=a.length;b<d;b++){var l=a[b];c[l.name]=l.value}return c}function x(a){return a.replace(/&/g,"&amp;").replace(F,function(a){var b=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(b-55296)+
+(a-56320)+65536)+";"}).replace(G,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function v(a,c){var b=!1,d=e.bind(a,a.push);return{start:function(a,f){a=e.lowercase(a);!b&&H[a]&&(b=a);b||!0!==t[a]||(d("<"),d(a),e.forEach(f,function(b,f){var g=e.lowercase(f),h="img"===a&&"src"===g||"background"===g;!0!==I[g]||!0===y[g]&&!c(b,h)||(d(" "),d(f),d('="'),d(x(b)),d('"'))}),d(">"))},end:function(a){a=e.lowercase(a);b||!0!==t[a]||!0===z[a]||(d("</"),d(a),d(">"));a==
+b&&(b=!1)},chars:function(a){b||d(x(a))}}}function n(a){if(a.nodeType===Node.ELEMENT_NODE)for(var c=a.attributes,b=0,d=c.length;b<d;b++){var e=c[b],f=e.name.toLowerCase();if("xmlns:ns1"===f||0===f.indexOf("ns1:"))a.removeAttributeNode(e),b--,d--}(c=a.firstChild)&&n(c);(c=a.nextSibling)&&n(c)}var w=e.$$minErr("$sanitize"),F=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,G=/([^\#-~ |!])/g,z=h("area,br,col,hr,img,wbr"),q=h("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),k=h("rp,rt"),u=e.extend({},k,q),q=e.extend({},
+q,h("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")),k=e.extend({},k,h("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),J=h("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"),
+H=h("script,style"),t=e.extend({},z,q,k,u),y=h("background,cite,href,longdesc,src,xlink:href"),u=h("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),k=h("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLengt
 h,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",
+!0),I=e.extend({},y,k,u),g;(function(a){if(a.document&&a.document.implementation)a=a.document.implementation.createHTMLDocument("inert");else throw w("noinert");var c=(a.documentElement||a.getDocumentElement()).getElementsByTagName("body");1===c.length?g=c[0]:(c=a.createElement("html"),g=a.createElement("body"),c.appendChild(g),a.appendChild(c))})(A);e.module("ngSanitize",[]).provider("$sanitize",function(){var a=!1;this.$get=["$$sanitizeUri",function(c){a&&e.extend(t,J);return function(a){var d=
+[];D(a,v(d,function(a,b){return!/^unsafe:/.test(c(a,b))}));return d.join("")}}];this.enableSvg=function(c){return e.isDefined(c)?(a=c,this):a}});e.module("ngSanitize").filter("linky",["$sanitize",function(a){var c=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,b=/^mailto:/i,d=e.$$minErr("linky"),g=e.isString;return function(f,h,m){function k(a){a&&p.push(C(a))}function q(a,b){var c;p.push("<a ");e.isFunction(m)&&(m=m(a));if(e.isObject(m))for(c in m)p.push(c+
+'="'+m[c]+'" ');else m={};!e.isDefined(h)||"target"in m||p.push('target="',h,'" ');p.push('href="',a.replace(/"/g,"&quot;"),'">');k(b);p.push("</a>")}if(null==f||""===f)return f;if(!g(f))throw d("notstring",f);for(var r=f,p=[],s,n;f=r.match(c);)s=f[0],f[2]||f[4]||(s=(f[3]?"http://":"mailto:")+s),n=f.index,k(r.substr(0,n)),q(s,f[0].replace(b,"")),r=r.substring(n+f[0].length);k(r);return a(p.join(""))}}])})(window,window.angular);
+//# sourceMappingURL=angular-sanitize.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js.map
new file mode 100644
index 0000000..7276abd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-sanitize.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-sanitize.min.js",
+"lineCount":14,
+"mappings":"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",
+"sources":["angular-sanitize.js"],
+"names":["window","angular","undefined","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","toMap","str","lowercaseKeys","obj","items","split","i","length","lowercase","htmlParser","html","handler","inertBodyElement","innerHTML","mXSSAttempts","$sanitizeMinErr","document","documentMode","stripCustomNsAttrs","node","firstChild","nodeType","start","nodeName","toLowerCase","attrToMap","attributes","textContent","nextNode","end","nextSibling","parentNode","removeChild","attrs","map","ii","attr","name","value","encodeEntities","replace","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","uriValidator","ignoreCurrentElement","out","bind","push","tag","blockedElements","validElements","forEach","key","lkey","isImage","validAttrs","uriAttrs","voidElements","Node","ELEMENT_NODE","l","attrNode","attrName","indexOf","removeAttributeNode","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","extend","blockE
 lements","inlineElements","svgElements","htmlAttrs","svgAttrs","implementation","doc","createHTMLDocument","bodyElements","getElementsByTagName","documentElement","getDocumentElement","createElement","appendChild","module","provider","$SanitizeProvider","svgEnabled","$get","$$sanitizeUri","uri","test","enableSvg","this.enableSvg","isDefined","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","isString","text","target","addText","addLink","url","isFunction","isObject","raw","match","index","substr","substring"]
+}


[25/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sh.js
new file mode 100644
index 0000000..14d81f9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sh",
+  "localeID": "en_SH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sl.js
new file mode 100644
index 0000000..752d458
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SLL",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sl",
+  "localeID": "en_SL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ss.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ss.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ss.js
new file mode 100644
index 0000000..691fa95
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ss.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ss",
+  "localeID": "en_SS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sx.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sx.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sx.js
new file mode 100644
index 0000000..dc3610a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sx.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "NAf.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sx",
+  "localeID": "en_SX",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sz.js
new file mode 100644
index 0000000..502409c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SZL",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sz",
+  "localeID": "en_SZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tc.js
new file mode 100644
index 0000000..f9a8a67
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tc.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-tc",
+  "localeID": "en_TC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tk.js
new file mode 100644
index 0000000..0180bdd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-tk",
+  "localeID": "en_TK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-to.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-to.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-to.js
new file mode 100644
index 0000000..34890a7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-to.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "T$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-to",
+  "localeID": "en_TO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tt.js
new file mode 100644
index 0000000..f261440
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tt.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-tt",
+  "localeID": "en_TT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tv.js
new file mode 100644
index 0000000..9726bbe
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tv.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-tv",
+  "localeID": "en_TV",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tz.js
new file mode 100644
index 0000000..d6ae6b9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-tz",
+  "localeID": "en_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ug.js
new file mode 100644
index 0000000..da8b433
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ug",
+  "localeID": "en_UG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-um.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-um.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-um.js
new file mode 100644
index 0000000..5c47c05
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-um.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-um",
+  "localeID": "en_UM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-us.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-us.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-us.js
new file mode 100644
index 0000000..515632a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-us.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-us",
+  "localeID": "en_US",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vc.js
new file mode 100644
index 0000000..3e1d2f6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vc.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-vc",
+  "localeID": "en_VC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vg.js
new file mode 100644
index 0000000..64fc920
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-vg",
+  "localeID": "en_VG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vi.js
new file mode 100644
index 0000000..47ecf3a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-vi",
+  "localeID": "en_VI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vu.js
new file mode 100644
index 0000000..61bf223
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-vu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "VUV",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-vu",
+  "localeID": "en_VU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ws.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ws.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ws.js
new file mode 100644
index 0000000..89b3a13
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ws.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "WST",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ws",
+  "localeID": "en_WS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-za.js
new file mode 100644
index 0000000..65ce4d7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-za.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd MMM y h:mm:ss a",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "y/MM/dd h:mm a",
+    "shortDate": "y/MM/dd",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-za",
+  "localeID": "en_ZA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zm.js
new file mode 100644
index 0000000..0b5d5fc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "ZMW",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-zm",
+  "localeID": "en_ZM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zw.js
new file mode 100644
index 0000000..2f81e30
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-zw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd MMM,y h:mm:ss a",
+    "mediumDate": "dd MMM,y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/y h:mm a",
+    "shortDate": "d/M/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-zw",
+  "localeID": "en_ZW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en.js
new file mode 100644
index 0000000..f794bab
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en",
+  "localeID": "en",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo-001.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo-001.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo-001.js
new file mode 100644
index 0000000..53fb0f7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo-001.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "atm",
+      "ptm"
+    ],
+    "DAY": [
+      "diman\u0109o",
+      "lundo",
+      "mardo",
+      "merkredo",
+      "\u0135a\u016ddo",
+      "vendredo",
+      "sabato"
+    ],
+    "ERANAMES": [
+      "aK",
+      "pK"
+    ],
+    "ERAS": [
+      "aK",
+      "pK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januaro",
+      "februaro",
+      "marto",
+      "aprilo",
+      "majo",
+      "junio",
+      "julio",
+      "a\u016dgusto",
+      "septembro",
+      "oktobro",
+      "novembro",
+      "decembro"
+    ],
+    "SHORTDAY": [
+      "di",
+      "lu",
+      "ma",
+      "me",
+      "\u0135a",
+      "ve",
+      "sa"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "a\u016dg",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januaro",
+      "februaro",
+      "marto",
+      "aprilo",
+      "majo",
+      "junio",
+      "julio",
+      "a\u016dgusto",
+      "septembro",
+      "oktobro",
+      "novembro",
+      "decembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d-'a' 'de' MMMM y",
+    "longDate": "y-MMMM-dd",
+    "medium": "y-MMM-dd HH:mm:ss",
+    "mediumDate": "y-MMM-dd",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy-MM-dd HH:mm",
+    "shortDate": "yy-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "eo-001",
+  "localeID": "eo_001",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[42/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.js
new file mode 100644
index 0000000..444be83
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.js
@@ -0,0 +1,768 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+var $resourceMinErr = angular.$$minErr('$resource');
+
+// Helper functions and regex to lookup a dotted path on an object
+// stopping at undefined/null.  The path must be composed of ASCII
+// identifiers (just like $parse)
+var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;
+
+function isValidDottedPath(path) {
+  return (path != null && path !== '' && path !== 'hasOwnProperty' &&
+      MEMBER_NAME_REGEX.test('.' + path));
+}
+
+function lookupDottedPath(obj, path) {
+  if (!isValidDottedPath(path)) {
+    throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path);
+  }
+  var keys = path.split('.');
+  for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) {
+    var key = keys[i];
+    obj = (obj !== null) ? obj[key] : undefined;
+  }
+  return obj;
+}
+
+/**
+ * Create a shallow copy of an object and clear other fields from the destination
+ */
+function shallowClearAndCopy(src, dst) {
+  dst = dst || {};
+
+  angular.forEach(dst, function(value, key) {
+    delete dst[key];
+  });
+
+  for (var key in src) {
+    if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+      dst[key] = src[key];
+    }
+  }
+
+  return dst;
+}
+
+/**
+ * @ngdoc module
+ * @name ngResource
+ * @description
+ *
+ * # ngResource
+ *
+ * The `ngResource` module provides interaction support with RESTful services
+ * via the $resource service.
+ *
+ *
+ * <div doc-module-components="ngResource"></div>
+ *
+ * See {@link ngResource.$resource `$resource`} for usage.
+ */
+
+/**
+ * @ngdoc service
+ * @name $resource
+ * @requires $http
+ * @requires ng.$log
+ * @requires $q
+ * @requires ng.$timeout
+ *
+ * @description
+ * A factory which creates a resource object that lets you interact with
+ * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
+ *
+ * The returned resource object has action methods which provide high-level behaviors without
+ * the need to interact with the low level {@link ng.$http $http} service.
+ *
+ * Requires the {@link ngResource `ngResource`} module to be installed.
+ *
+ * By default, trailing slashes will be stripped from the calculated URLs,
+ * which can pose problems with server backends that do not expect that
+ * behavior.  This can be disabled by configuring the `$resourceProvider` like
+ * this:
+ *
+ * ```js
+     app.config(['$resourceProvider', function($resourceProvider) {
+       // Don't strip trailing slashes from calculated URLs
+       $resourceProvider.defaults.stripTrailingSlashes = false;
+     }]);
+ * ```
+ *
+ * @param {string} url A parameterized URL template with parameters prefixed by `:` as in
+ *   `/user/:username`. If you are using a URL with a port number (e.g.
+ *   `http://example.com:8080/api`), it will be respected.
+ *
+ *   If you are using a url with a suffix, just add the suffix, like this:
+ *   `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`
+ *   or even `$resource('http://example.com/resource/:resource_id.:format')`
+ *   If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
+ *   collapsed down to a single `.`.  If you need this sequence to appear and not collapse then you
+ *   can escape it with `/\.`.
+ *
+ * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
+ *   `actions` methods. If a parameter value is a function, it will be executed every time
+ *   when a param value needs to be obtained for a request (unless the param was overridden).
+ *
+ *   Each key value in the parameter object is first bound to url template if present and then any
+ *   excess keys are appended to the url search query after the `?`.
+ *
+ *   Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
+ *   URL `/path/greet?salutation=Hello`.
+ *
+ *   If the parameter value is prefixed with `@` then the value for that parameter will be extracted
+ *   from the corresponding property on the `data` object (provided when calling an action method).
+ *   For example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of
+ *   `someParam` will be `data.someProp`.
+ *
+ * @param {Object.<Object>=} actions Hash with declaration of custom actions that should extend
+ *   the default set of resource actions. The declaration should be created in the format of {@link
+ *   ng.$http#usage $http.config}:
+ *
+ *       {action1: {method:?, params:?, isArray:?, headers:?, ...},
+ *        action2: {method:?, params:?, isArray:?, headers:?, ...},
+ *        ...}
+ *
+ *   Where:
+ *
+ *   - **`action`** \u2013 {string} \u2013 The name of action. This name becomes the name of the method on
+ *     your resource object.
+ *   - **`method`** \u2013 {string} \u2013 Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,
+ *     `DELETE`, `JSONP`, etc).
+ *   - **`params`** \u2013 {Object=} \u2013 Optional set of pre-bound parameters for this action. If any of
+ *     the parameter value is a function, it will be executed every time when a param value needs to
+ *     be obtained for a request (unless the param was overridden).
+ *   - **`url`** \u2013 {string} \u2013 action specific `url` override. The url templating is supported just
+ *     like for the resource-level urls.
+ *   - **`isArray`** \u2013 {boolean=} \u2013 If true then the returned object for this action is an array,
+ *     see `returns` section.
+ *   - **`transformRequest`** \u2013
+ *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` \u2013
+ *     transform function or an array of such functions. The transform function takes the http
+ *     request body and headers and returns its transformed (typically serialized) version.
+ *     By default, transformRequest will contain one function that checks if the request data is
+ *     an object and serializes to using `angular.toJson`. To prevent this behavior, set
+ *     `transformRequest` to an empty array: `transformRequest: []`
+ *   - **`transformResponse`** \u2013
+ *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` \u2013
+ *     transform function or an array of such functions. The transform function takes the http
+ *     response body and headers and returns its transformed (typically deserialized) version.
+ *     By default, transformResponse will contain one function that checks if the response looks
+ *     like a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior,
+ *     set `transformResponse` to an empty array: `transformResponse: []`
+ *   - **`cache`** \u2013 `{boolean|Cache}` \u2013 If true, a default $http cache will be used to cache the
+ *     GET request, otherwise if a cache instance built with
+ *     {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
+ *     caching.
+ *   - **`timeout`** \u2013 `{number}` \u2013 timeout in milliseconds.<br />
+ *     **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are
+ *     **not** supported in $resource, because the same value would be used for multiple requests.
+ *     If you are looking for a way to cancel requests, you should use the `cancellable` option.
+ *   - **`cancellable`** \u2013 `{boolean}` \u2013 if set to true, the request made by a "non-instance" call
+ *     will be cancelled (if not already completed) by calling `$cancelRequest()` on the call's
+ *     return value. Calling `$cancelRequest()` for a non-cancellable or an already
+ *     completed/cancelled request will have no effect.<br />
+ *   - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the
+ *     XHR object. See
+ *     [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)
+ *     for more information.
+ *   - **`responseType`** - `{string}` - see
+ *     [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
+ *   - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -
+ *     `response` and `responseError`. Both `response` and `responseError` interceptors get called
+ *     with `http response` object. See {@link ng.$http $http interceptors}.
+ *
+ * @param {Object} options Hash with custom settings that should extend the
+ *   default `$resourceProvider` behavior.  The supported options are:
+ *
+ *   - **`stripTrailingSlashes`** \u2013 {boolean} \u2013 If true then the trailing
+ *   slashes from any calculated URL will be stripped. (Defaults to true.)
+ *   - **`cancellable`** \u2013 {boolean} \u2013 If true, the request made by a "non-instance" call will be
+ *   cancelled (if not already completed) by calling `$cancelRequest()` on the call's return value.
+ *   This can be overwritten per action. (Defaults to false.)
+ *
+ * @returns {Object} A resource "class" object with methods for the default set of resource actions
+ *   optionally extended with custom `actions`. The default set contains these actions:
+ *   ```js
+ *   { 'get':    {method:'GET'},
+ *     'save':   {method:'POST'},
+ *     'query':  {method:'GET', isArray:true},
+ *     'remove': {method:'DELETE'},
+ *     'delete': {method:'DELETE'} };
+ *   ```
+ *
+ *   Calling these methods invoke an {@link ng.$http} with the specified http method,
+ *   destination and parameters. When the data is returned from the server then the object is an
+ *   instance of the resource class. The actions `save`, `remove` and `delete` are available on it
+ *   as  methods with the `$` prefix. This allows you to easily perform CRUD operations (create,
+ *   read, update, delete) on server-side data like this:
+ *   ```js
+ *   var User = $resource('/user/:userId', {userId:'@id'});
+ *   var user = User.get({userId:123}, function() {
+ *     user.abc = true;
+ *     user.$save();
+ *   });
+ *   ```
+ *
+ *   It is important to realize that invoking a $resource object method immediately returns an
+ *   empty reference (object or array depending on `isArray`). Once the data is returned from the
+ *   server the existing reference is populated with the actual data. This is a useful trick since
+ *   usually the resource is assigned to a model which is then rendered by the view. Having an empty
+ *   object results in no rendering, once the data arrives from the server then the object is
+ *   populated with the data and the view automatically re-renders itself showing the new data. This
+ *   means that in most cases one never has to write a callback function for the action methods.
+ *
+ *   The action methods on the class object or instance object can be invoked with the following
+ *   parameters:
+ *
+ *   - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])`
+ *   - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])`
+ *   - non-GET instance actions:  `instance.$action([parameters], [success], [error])`
+ *
+ *
+ *   Success callback is called with (value, responseHeaders) arguments, where the value is
+ *   the populated resource instance or collection object. The error callback is called
+ *   with (httpResponse) argument.
+ *
+ *   Class actions return empty instance (with additional properties below).
+ *   Instance actions return promise of the action.
+ *
+ *   The Resource instances and collections have these additional properties:
+ *
+ *   - `$promise`: the {@link ng.$q promise} of the original server interaction that created this
+ *     instance or collection.
+ *
+ *     On success, the promise is resolved with the same resource instance or collection object,
+ *     updated with data from server. This makes it easy to use in
+ *     {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view
+ *     rendering until the resource(s) are loaded.
+ *
+ *     On failure, the promise is rejected with the {@link ng.$http http response} object, without
+ *     the `resource` property.
+ *
+ *     If an interceptor object was provided, the promise will instead be resolved with the value
+ *     returned by the interceptor.
+ *
+ *   - `$resolved`: `true` after first server interaction is completed (either with success or
+ *      rejection), `false` before that. Knowing if the Resource has been resolved is useful in
+ *      data-binding.
+ *
+ *   The Resource instances and collections have these additional methods:
+ *
+ *   - `$cancelRequest`: If there is a cancellable, pending request related to the instance or
+ *      collection, calling this method will abort the request.
+ *
+ * @example
+ *
+ * # Credit card resource
+ *
+ * ```js
+     // Define CreditCard class
+     var CreditCard = $resource('/user/:userId/card/:cardId',
+      {userId:123, cardId:'@id'}, {
+       charge: {method:'POST', params:{charge:true}}
+      });
+
+     // We can retrieve a collection from the server
+     var cards = CreditCard.query(function() {
+       // GET: /user/123/card
+       // server returns: [ {id:456, number:'1234', name:'Smith'} ];
+
+       var card = cards[0];
+       // each item is an instance of CreditCard
+       expect(card instanceof CreditCard).toEqual(true);
+       card.name = "J. Smith";
+       // non GET methods are mapped onto the instances
+       card.$save();
+       // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
+       // server returns: {id:456, number:'1234', name: 'J. Smith'};
+
+       // our custom method is mapped as well.
+       card.$charge({amount:9.99});
+       // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
+     });
+
+     // we can create an instance as well
+     var newCard = new CreditCard({number:'0123'});
+     newCard.name = "Mike Smith";
+     newCard.$save();
+     // POST: /user/123/card {number:'0123', name:'Mike Smith'}
+     // server returns: {id:789, number:'0123', name: 'Mike Smith'};
+     expect(newCard.id).toEqual(789);
+ * ```
+ *
+ * The object returned from this function execution is a resource "class" which has "static" method
+ * for each action in the definition.
+ *
+ * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and
+ * `headers`.
+ *
+ * @example
+ *
+ * # User resource
+ *
+ * When the data is returned from the server then the object is an instance of the resource type and
+ * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
+ * operations (create, read, update, delete) on server-side data.
+
+   ```js
+     var User = $resource('/user/:userId', {userId:'@id'});
+     User.get({userId:123}, function(user) {
+       user.abc = true;
+       user.$save();
+     });
+   ```
+ *
+ * It's worth noting that the success callback for `get`, `query` and other methods gets passed
+ * in the response that came from the server as well as $http header getter function, so one
+ * could rewrite the above example and get access to http headers as:
+ *
+   ```js
+     var User = $resource('/user/:userId', {userId:'@id'});
+     User.get({userId:123}, function(user, getResponseHeaders){
+       user.abc = true;
+       user.$save(function(user, putResponseHeaders) {
+         //user => saved user object
+         //putResponseHeaders => $http header getter
+       });
+     });
+   ```
+ *
+ * You can also access the raw `$http` promise via the `$promise` property on the object returned
+ *
+   ```
+     var User = $resource('/user/:userId', {userId:'@id'});
+     User.get({userId:123})
+         .$promise.then(function(user) {
+           $scope.user = user;
+         });
+   ```
+ *
+ * @example
+ *
+ * # Creating a custom 'PUT' request
+ *
+ * In this example we create a custom method on our resource to make a PUT request
+ * ```js
+ *    var app = angular.module('app', ['ngResource', 'ngRoute']);
+ *
+ *    // Some APIs expect a PUT request in the format URL/object/ID
+ *    // Here we are creating an 'update' method
+ *    app.factory('Notes', ['$resource', function($resource) {
+ *    return $resource('/notes/:id', null,
+ *        {
+ *            'update': { method:'PUT' }
+ *        });
+ *    }]);
+ *
+ *    // In our controller we get the ID from the URL using ngRoute and $routeParams
+ *    // We pass in $routeParams and our Notes factory along with $scope
+ *    app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',
+                                      function($scope, $routeParams, Notes) {
+ *    // First get a note object from the factory
+ *    var note = Notes.get({ id:$routeParams.id });
+ *    $id = note.id;
+ *
+ *    // Now call update passing in the ID first then the object you are updating
+ *    Notes.update({ id:$id }, note);
+ *
+ *    // This will PUT /notes/ID with the note object in the request payload
+ *    }]);
+ * ```
+ *
+ * @example
+ *
+ * # Cancelling requests
+ *
+ * If an action's configuration specifies that it is cancellable, you can cancel the request related
+ * to an instance or collection (as long as it is a result of a "non-instance" call):
+ *
+   ```js
+     // ...defining the `Hotel` resource...
+     var Hotel = $resource('/api/hotel/:id', {id: '@id'}, {
+       // Let's make the `query()` method cancellable
+       query: {method: 'get', isArray: true, cancellable: true}
+     });
+
+     // ...somewhere in the PlanVacationController...
+     ...
+     this.onDestinationChanged = function onDestinationChanged(destination) {
+       // We don't care about any pending request for hotels
+       // in a different destination any more
+       this.availableHotels.$cancelRequest();
+
+       // Let's query for hotels in '<destination>'
+       // (calls: /api/hotel?location=<destination>)
+       this.availableHotels = Hotel.query({location: destination});
+     };
+   ```
+ *
+ */
+angular.module('ngResource', ['ng']).
+  provider('$resource', function() {
+    var PROTOCOL_AND_DOMAIN_REGEX = /^https?:\/\/[^\/]*/;
+    var provider = this;
+
+    this.defaults = {
+      // Strip slashes by default
+      stripTrailingSlashes: true,
+
+      // Default actions configuration
+      actions: {
+        'get': {method: 'GET'},
+        'save': {method: 'POST'},
+        'query': {method: 'GET', isArray: true},
+        'remove': {method: 'DELETE'},
+        'delete': {method: 'DELETE'}
+      }
+    };
+
+    this.$get = ['$http', '$log', '$q', '$timeout', function($http, $log, $q, $timeout) {
+
+      var noop = angular.noop,
+        forEach = angular.forEach,
+        extend = angular.extend,
+        copy = angular.copy,
+        isFunction = angular.isFunction;
+
+      /**
+       * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+       * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set
+       * (pchar) allowed in path segments:
+       *    segment       = *pchar
+       *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+       *    pct-encoded   = "%" HEXDIG HEXDIG
+       *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+       *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+       *                     / "*" / "+" / "," / ";" / "="
+       */
+      function encodeUriSegment(val) {
+        return encodeUriQuery(val, true).
+          replace(/%26/gi, '&').
+          replace(/%3D/gi, '=').
+          replace(/%2B/gi, '+');
+      }
+
+
+      /**
+       * This method is intended for encoding *key* or *value* parts of query component. We need a
+       * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't
+       * have to be encoded per http://tools.ietf.org/html/rfc3986:
+       *    query       = *( pchar / "/" / "?" )
+       *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+       *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+       *    pct-encoded   = "%" HEXDIG HEXDIG
+       *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+       *                     / "*" / "+" / "," / ";" / "="
+       */
+      function encodeUriQuery(val, pctEncodeSpaces) {
+        return encodeURIComponent(val).
+          replace(/%40/gi, '@').
+          replace(/%3A/gi, ':').
+          replace(/%24/g, '$').
+          replace(/%2C/gi, ',').
+          replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+      }
+
+      function Route(template, defaults) {
+        this.template = template;
+        this.defaults = extend({}, provider.defaults, defaults);
+        this.urlParams = {};
+      }
+
+      Route.prototype = {
+        setUrlParams: function(config, params, actionUrl) {
+          var self = this,
+            url = actionUrl || self.template,
+            val,
+            encodedVal,
+            protocolAndDomain = '';
+
+          var urlParams = self.urlParams = {};
+          forEach(url.split(/\W/), function(param) {
+            if (param === 'hasOwnProperty') {
+              throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name.");
+            }
+            if (!(new RegExp("^\\d+$").test(param)) && param &&
+              (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) {
+              urlParams[param] = {
+                isQueryParamValue: (new RegExp("\\?.*=:" + param + "(?:\\W|$)")).test(url)
+              };
+            }
+          });
+          url = url.replace(/\\:/g, ':');
+          url = url.replace(PROTOCOL_AND_DOMAIN_REGEX, function(match) {
+            protocolAndDomain = match;
+            return '';
+          });
+
+          params = params || {};
+          forEach(self.urlParams, function(paramInfo, urlParam) {
+            val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
+            if (angular.isDefined(val) && val !== null) {
+              if (paramInfo.isQueryParamValue) {
+                encodedVal = encodeUriQuery(val, true);
+              } else {
+                encodedVal = encodeUriSegment(val);
+              }
+              url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) {
+                return encodedVal + p1;
+              });
+            } else {
+              url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match,
+                  leadingSlashes, tail) {
+                if (tail.charAt(0) == '/') {
+                  return tail;
+                } else {
+                  return leadingSlashes + tail;
+                }
+              });
+            }
+          });
+
+          // strip trailing slashes and set the url (unless this behavior is specifically disabled)
+          if (self.defaults.stripTrailingSlashes) {
+            url = url.replace(/\/+$/, '') || '/';
+          }
+
+          // then replace collapse `/.` if found in the last URL path segment before the query
+          // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
+          url = url.replace(/\/\.(?=\w+($|\?))/, '.');
+          // replace escaped `/\.` with `/.`
+          config.url = protocolAndDomain + url.replace(/\/\\\./, '/.');
+
+
+          // set params - delegate param encoding to $http
+          forEach(params, function(value, key) {
+            if (!self.urlParams[key]) {
+              config.params = config.params || {};
+              config.params[key] = value;
+            }
+          });
+        }
+      };
+
+
+      function resourceFactory(url, paramDefaults, actions, options) {
+        var route = new Route(url, options);
+
+        actions = extend({}, provider.defaults.actions, actions);
+
+        function extractParams(data, actionParams) {
+          var ids = {};
+          actionParams = extend({}, paramDefaults, actionParams);
+          forEach(actionParams, function(value, key) {
+            if (isFunction(value)) { value = value(); }
+            ids[key] = value && value.charAt && value.charAt(0) == '@' ?
+              lookupDottedPath(data, value.substr(1)) : value;
+          });
+          return ids;
+        }
+
+        function defaultResponseInterceptor(response) {
+          return response.resource;
+        }
+
+        function Resource(value) {
+          shallowClearAndCopy(value || {}, this);
+        }
+
+        Resource.prototype.toJSON = function() {
+          var data = extend({}, this);
+          delete data.$promise;
+          delete data.$resolved;
+          return data;
+        };
+
+        forEach(actions, function(action, name) {
+          var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
+          var numericTimeout = action.timeout;
+          var cancellable = angular.isDefined(action.cancellable) ? action.cancellable :
+              (options && angular.isDefined(options.cancellable)) ? options.cancellable :
+              provider.defaults.cancellable;
+
+          if (numericTimeout && !angular.isNumber(numericTimeout)) {
+            $log.debug('ngResource:\n' +
+                       '  Only numeric values are allowed as `timeout`.\n' +
+                       '  Promises are not supported in $resource, because the same value would ' +
+                       'be used for multiple requests. If you are looking for a way to cancel ' +
+                       'requests, you should use the `cancellable` option.');
+            delete action.timeout;
+            numericTimeout = null;
+          }
+
+          Resource[name] = function(a1, a2, a3, a4) {
+            var params = {}, data, success, error;
+
+            /* jshint -W086 */ /* (purposefully fall through case statements) */
+            switch (arguments.length) {
+              case 4:
+                error = a4;
+                success = a3;
+              //fallthrough
+              case 3:
+              case 2:
+                if (isFunction(a2)) {
+                  if (isFunction(a1)) {
+                    success = a1;
+                    error = a2;
+                    break;
+                  }
+
+                  success = a2;
+                  error = a3;
+                  //fallthrough
+                } else {
+                  params = a1;
+                  data = a2;
+                  success = a3;
+                  break;
+                }
+              case 1:
+                if (isFunction(a1)) success = a1;
+                else if (hasBody) data = a1;
+                else params = a1;
+                break;
+              case 0: break;
+              default:
+                throw $resourceMinErr('badargs',
+                  "Expected up to 4 arguments [params, data, success, error], got {0} arguments",
+                  arguments.length);
+            }
+            /* jshint +W086 */ /* (purposefully fall through case statements) */
+
+            var isInstanceCall = this instanceof Resource;
+            var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));
+            var httpConfig = {};
+            var responseInterceptor = action.interceptor && action.interceptor.response ||
+              defaultResponseInterceptor;
+            var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||
+              undefined;
+            var timeoutDeferred;
+            var numericTimeoutPromise;
+
+            forEach(action, function(value, key) {
+              switch (key) {
+                default:
+                  httpConfig[key] = copy(value);
+                  break;
+                case 'params':
+                case 'isArray':
+                case 'interceptor':
+                case 'cancellable':
+                  break;
+              }
+            });
+
+            if (!isInstanceCall && cancellable) {
+              timeoutDeferred = $q.defer();
+              httpConfig.timeout = timeoutDeferred.promise;
+
+              if (numericTimeout) {
+                numericTimeoutPromise = $timeout(timeoutDeferred.resolve, numericTimeout);
+              }
+            }
+
+            if (hasBody) httpConfig.data = data;
+            route.setUrlParams(httpConfig,
+              extend({}, extractParams(data, action.params || {}), params),
+              action.url);
+
+            var promise = $http(httpConfig).then(function(response) {
+              var data = response.data;
+
+              if (data) {
+                // Need to convert action.isArray to boolean in case it is undefined
+                // jshint -W018
+                if (angular.isArray(data) !== (!!action.isArray)) {
+                  throw $resourceMinErr('badcfg',
+                      'Error in resource configuration for action `{0}`. Expected response to ' +
+                      'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',
+                    angular.isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);
+                }
+                // jshint +W018
+                if (action.isArray) {
+                  value.length = 0;
+                  forEach(data, function(item) {
+                    if (typeof item === "object") {
+                      value.push(new Resource(item));
+                    } else {
+                      // Valid JSON values may be string literals, and these should not be converted
+                      // into objects. These items will not have access to the Resource prototype
+                      // methods, but unfortunately there
+                      value.push(item);
+                    }
+                  });
+                } else {
+                  var promise = value.$promise;     // Save the promise
+                  shallowClearAndCopy(data, value);
+                  value.$promise = promise;         // Restore the promise
+                }
+              }
+              response.resource = value;
+
+              return response;
+            }, function(response) {
+              (error || noop)(response);
+              return $q.reject(response);
+            });
+
+            promise.finally(function() {
+              value.$resolved = true;
+              if (!isInstanceCall && cancellable) {
+                value.$cancelRequest = angular.noop;
+                $timeout.cancel(numericTimeoutPromise);
+                timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;
+              }
+            });
+
+            promise = promise.then(
+              function(response) {
+                var value = responseInterceptor(response);
+                (success || noop)(value, response.headers);
+                return value;
+              },
+              responseErrorInterceptor);
+
+            if (!isInstanceCall) {
+              // we are creating instance / collection
+              // - set the initial promise
+              // - return the instance / collection
+              value.$promise = promise;
+              value.$resolved = false;
+              if (cancellable) value.$cancelRequest = timeoutDeferred.resolve;
+
+              return value;
+            }
+
+            // instance call
+            return promise;
+          };
+
+
+          Resource.prototype['$' + name] = function(params, success, error) {
+            if (isFunction(params)) {
+              error = success; success = params; params = {};
+            }
+            var result = Resource[name].call(this, params, this, success, error);
+            return result.$promise || result;
+          };
+        });
+
+        Resource.bind = function(additionalParamDefaults) {
+          return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);
+        };
+
+        return Resource;
+      }
+
+      return resourceFactory;
+    }];
+  });
+
+
+})(window, window.angular);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js
new file mode 100644
index 0000000..306657d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js
@@ -0,0 +1,15 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(Q,d,G){'use strict';function H(t,g){g=g||{};d.forEach(g,function(d,q){delete g[q]});for(var q in t)!t.hasOwnProperty(q)||"$"===q.charAt(0)&&"$"===q.charAt(1)||(g[q]=t[q]);return g}var z=d.$$minErr("$resource"),N=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var t=/^https?:\/\/[^\/]*/,g=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};
+this.$get=["$http","$log","$q","$timeout",function(q,M,I,J){function A(d,h){return encodeURIComponent(d).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,h?"%20":"+")}function B(d,h){this.template=d;this.defaults=v({},g.defaults,h);this.urlParams={}}function K(e,h,n,k){function c(a,b){var c={};b=v({},h,b);u(b,function(b,h){x(b)&&(b=b());var f;if(b&&b.charAt&&"@"==b.charAt(0)){f=a;var l=b.substr(1);if(null==l||""===l||"hasOwnProperty"===l||!N.test("."+
+l))throw z("badmember",l);for(var l=l.split("."),m=0,k=l.length;m<k&&d.isDefined(f);m++){var r=l[m];f=null!==f?f[r]:G}}else f=b;c[h]=f});return c}function O(a){return a.resource}function m(a){H(a||{},this)}var t=new B(e,k);n=v({},g.defaults.actions,n);m.prototype.toJSON=function(){var a=v({},this);delete a.$promise;delete a.$resolved;return a};u(n,function(a,b){var h=/^(POST|PUT|PATCH)$/i.test(a.method),e=a.timeout,E=d.isDefined(a.cancellable)?a.cancellable:k&&d.isDefined(k.cancellable)?k.cancellable:
+g.defaults.cancellable;e&&!d.isNumber(e)&&(M.debug("ngResource:\n  Only numeric values are allowed as `timeout`.\n  Promises are not supported in $resource, because the same value would be used for multiple requests. If you are looking for a way to cancel requests, you should use the `cancellable` option."),delete a.timeout,e=null);m[b]=function(f,l,k,g){var r={},n,w,C;switch(arguments.length){case 4:C=g,w=k;case 3:case 2:if(x(l)){if(x(f)){w=f;C=l;break}w=l;C=k}else{r=f;n=l;w=k;break}case 1:x(f)?
+w=f:h?n=f:r=f;break;case 0:break;default:throw z("badargs",arguments.length);}var D=this instanceof m,p=D?n:a.isArray?[]:new m(n),s={},A=a.interceptor&&a.interceptor.response||O,B=a.interceptor&&a.interceptor.responseError||G,y,F;u(a,function(a,b){switch(b){default:s[b]=P(a);case "params":case "isArray":case "interceptor":case "cancellable":}});!D&&E&&(y=I.defer(),s.timeout=y.promise,e&&(F=J(y.resolve,e)));h&&(s.data=n);t.setUrlParams(s,v({},c(n,a.params||{}),r),a.url);r=q(s).then(function(f){var c=
+f.data;if(c){if(d.isArray(c)!==!!a.isArray)throw z("badcfg",b,a.isArray?"array":"object",d.isArray(c)?"array":"object",s.method,s.url);if(a.isArray)p.length=0,u(c,function(b){"object"===typeof b?p.push(new m(b)):p.push(b)});else{var l=p.$promise;H(c,p);p.$promise=l}}f.resource=p;return f},function(b){(C||L)(b);return I.reject(b)});r.finally(function(){p.$resolved=!0;!D&&E&&(p.$cancelRequest=d.noop,J.cancel(F),y=F=s.timeout=null)});r=r.then(function(b){var a=A(b);(w||L)(a,b.headers);return a},B);return D?
+r:(p.$promise=r,p.$resolved=!1,E&&(p.$cancelRequest=y.resolve),p)};m.prototype["$"+b]=function(a,c,d){x(a)&&(d=c,c=a,a={});a=m[b].call(this,a,this,c,d);return a.$promise||a}});m.bind=function(a){return K(e,v({},h,a),n)};return m}var L=d.noop,u=d.forEach,v=d.extend,P=d.copy,x=d.isFunction;B.prototype={setUrlParams:function(e,h,n){var k=this,c=n||k.template,g,m,q="",a=k.urlParams={};u(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw z("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+
+b+"(\\W|$)")).test(c)&&(a[b]={isQueryParamValue:(new RegExp("\\?.*=:"+b+"(?:\\W|$)")).test(c)})});c=c.replace(/\\:/g,":");c=c.replace(t,function(a){q=a;return""});h=h||{};u(k.urlParams,function(a,e){g=h.hasOwnProperty(e)?h[e]:k.defaults[e];d.isDefined(g)&&null!==g?(m=a.isQueryParamValue?A(g,!0):A(g,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+e+"(\\W|$)","g"),function(a,b){return m+b})):c=c.replace(new RegExp("(/?):"+e+"(\\W|$)","g"),function(a,b,c){return"/"==
+c.charAt(0)?c:b+c})});k.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");e.url=q+c.replace(/\/\\\./,"/.");u(h,function(a,c){k.urlParams[c]||(e.params=e.params||{},e.params[c]=a)})}};return K}]})})(window,window.angular);
+//# sourceMappingURL=angular-resource.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js.map
new file mode 100644
index 0000000..5174e18
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-resource.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-resource.min.js",
+"lineCount":14,
+"mappings":"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",
+"sources":["angular-resource.js"],
+"names":["window","angular","undefined","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","provider","PROTOCOL_AND_DOMAIN_REGEX","defaults","stripTrailingSlashes","actions","method","isArray","$get","$http","$log","$q","$timeout","encodeUriQuery","val","pctEncodeSpaces","encodeURIComponent","replace","Route","template","extend","urlParams","resourceFactory","url","paramDefaults","options","extractParams","data","actionParams","ids","isFunction","path","test","keys","split","i","ii","length","isDefined","obj","defaultResponseInterceptor","response","resource","Resource","route","prototype","toJSON","Resource.prototype.toJSON","$promise","$resolved","action","name","hasBody","numericTimeout","timeout","cancellable","isNumber","debug","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseEr
 ror","timeoutDeferred","numericTimeoutPromise","copy","defer","promise","resolve","setUrlParams","then","item","push","noop","reject","finally","$cancelRequest","cancel","headers","result","call","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","encodedVal","protocolAndDomain","param","RegExp","isQueryParamValue","match","paramInfo","urlParam","p1","leadingSlashes","tail"]
+}

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.js
new file mode 100644
index 0000000..45ac238
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-route.js
@@ -0,0 +1,1016 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngRoute
+ * @description
+ *
+ * # ngRoute
+ *
+ * The `ngRoute` module provides routing and deeplinking services and directives for angular apps.
+ *
+ * ## Example
+ * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
+ *
+ *
+ * <div doc-module-components="ngRoute"></div>
+ */
+ /* global -ngRouteModule */
+var ngRouteModule = angular.module('ngRoute', ['ng']).
+                        provider('$route', $RouteProvider),
+    $routeMinErr = angular.$$minErr('ngRoute');
+
+/**
+ * @ngdoc provider
+ * @name $routeProvider
+ *
+ * @description
+ *
+ * Used for configuring routes.
+ *
+ * ## Example
+ * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
+ *
+ * ## Dependencies
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ */
+function $RouteProvider() {
+  function inherit(parent, extra) {
+    return angular.extend(Object.create(parent), extra);
+  }
+
+  var routes = {};
+
+  /**
+   * @ngdoc method
+   * @name $routeProvider#when
+   *
+   * @param {string} path Route path (matched against `$location.path`). If `$location.path`
+   *    contains redundant trailing slash or is missing one, the route will still match and the
+   *    `$location.path` will be updated to add or drop the trailing slash to exactly match the
+   *    route definition.
+   *
+   *    * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up
+   *        to the next slash are matched and stored in `$routeParams` under the given `name`
+   *        when the route matches.
+   *    * `path` can contain named groups starting with a colon and ending with a star:
+   *        e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`
+   *        when the route matches.
+   *    * `path` can contain optional named groups with a question mark: e.g.`:name?`.
+   *
+   *    For example, routes like `/color/:color/largecode/:largecode*\/edit` will match
+   *    `/color/brown/largecode/code/with/slashes/edit` and extract:
+   *
+   *    * `color: brown`
+   *    * `largecode: code/with/slashes`.
+   *
+   *
+   * @param {Object} route Mapping information to be assigned to `$route.current` on route
+   *    match.
+   *
+   *    Object properties:
+   *
+   *    - `controller` \u2013 `{(string|function()=}` \u2013 Controller fn that should be associated with
+   *      newly created scope or the name of a {@link angular.Module#controller registered
+   *      controller} if passed as a string.
+   *    - `controllerAs` \u2013 `{string=}` \u2013 An identifier name for a reference to the controller.
+   *      If present, the controller will be published to scope under the `controllerAs` name.
+   *    - `template` \u2013 `{string=|function()=}` \u2013 html template as a string or a function that
+   *      returns an html template as a string which should be used by {@link
+   *      ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.
+   *      This property takes precedence over `templateUrl`.
+   *
+   *      If `template` is a function, it will be called with the following parameters:
+   *
+   *      - `{Array.<Object>}` - route parameters extracted from the current
+   *        `$location.path()` by applying the current route
+   *
+   *    - `templateUrl` \u2013 `{string=|function()=}` \u2013 path or function that returns a path to an html
+   *      template that should be used by {@link ngRoute.directive:ngView ngView}.
+   *
+   *      If `templateUrl` is a function, it will be called with the following parameters:
+   *
+   *      - `{Array.<Object>}` - route parameters extracted from the current
+   *        `$location.path()` by applying the current route
+   *
+   *    - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should
+   *      be injected into the controller. If any of these dependencies are promises, the router
+   *      will wait for them all to be resolved or one to be rejected before the controller is
+   *      instantiated.
+   *      If all the promises are resolved successfully, the values of the resolved promises are
+   *      injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is
+   *      fired. If any of the promises are rejected the
+   *      {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired.
+   *      For easier access to the resolved dependencies from the template, the `resolve` map will
+   *      be available on the scope of the route, under `$resolve` (by default) or a custom name
+   *      specified by the `resolveAs` property (see below). This can be particularly useful, when
+   *      working with {@link angular.Module#component components} as route templates.<br />
+   *      <div class="alert alert-warning">
+   *        **Note:** If your scope already contains a property with this name, it will be hidden
+   *        or overwritten. Make sure, you specify an appropriate name for this property, that
+   *        does not collide with other properties on the scope.
+   *      </div>
+   *      The map object is:
+   *
+   *      - `key` \u2013 `{string}`: a name of a dependency to be injected into the controller.
+   *      - `factory` - `{string|function}`: If `string` then it is an alias for a service.
+   *        Otherwise if function, then it is {@link auto.$injector#invoke injected}
+   *        and the return value is treated as the dependency. If the result is a promise, it is
+   *        resolved before its value is injected into the controller. Be aware that
+   *        `ngRoute.$routeParams` will still refer to the previous route within these resolve
+   *        functions.  Use `$route.current.params` to access the new route parameters, instead.
+   *
+   *    - `resolveAs` - `{string=}` - The name under which the `resolve` map will be available on
+   *      the scope of the route. If omitted, defaults to `$resolve`.
+   *
+   *    - `redirectTo` \u2013 `{(string|function())=}` \u2013 value to update
+   *      {@link ng.$location $location} path with and trigger route redirection.
+   *
+   *      If `redirectTo` is a function, it will be called with the following parameters:
+   *
+   *      - `{Object.<string>}` - route parameters extracted from the current
+   *        `$location.path()` by applying the current route templateUrl.
+   *      - `{string}` - current `$location.path()`
+   *      - `{Object}` - current `$location.search()`
+   *
+   *      The custom `redirectTo` function is expected to return a string which will be used
+   *      to update `$location.path()` and `$location.search()`.
+   *
+   *    - `[reloadOnSearch=true]` - `{boolean=}` - reload route when only `$location.search()`
+   *      or `$location.hash()` changes.
+   *
+   *      If the option is set to `false` and url in the browser changes, then
+   *      `$routeUpdate` event is broadcasted on the root scope.
+   *
+   *    - `[caseInsensitiveMatch=false]` - `{boolean=}` - match routes without being case sensitive
+   *
+   *      If the option is set to `true`, then the particular route can be matched without being
+   *      case sensitive
+   *
+   * @returns {Object} self
+   *
+   * @description
+   * Adds a new route definition to the `$route` service.
+   */
+  this.when = function(path, route) {
+    //copy original route object to preserve params inherited from proto chain
+    var routeCopy = angular.copy(route);
+    if (angular.isUndefined(routeCopy.reloadOnSearch)) {
+      routeCopy.reloadOnSearch = true;
+    }
+    if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {
+      routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;
+    }
+    routes[path] = angular.extend(
+      routeCopy,
+      path && pathRegExp(path, routeCopy)
+    );
+
+    // create redirection for trailing slashes
+    if (path) {
+      var redirectPath = (path[path.length - 1] == '/')
+            ? path.substr(0, path.length - 1)
+            : path + '/';
+
+      routes[redirectPath] = angular.extend(
+        {redirectTo: path},
+        pathRegExp(redirectPath, routeCopy)
+      );
+    }
+
+    return this;
+  };
+
+  /**
+   * @ngdoc property
+   * @name $routeProvider#caseInsensitiveMatch
+   * @description
+   *
+   * A boolean property indicating if routes defined
+   * using this provider should be matched using a case insensitive
+   * algorithm. Defaults to `false`.
+   */
+  this.caseInsensitiveMatch = false;
+
+   /**
+    * @param path {string} path
+    * @param opts {Object} options
+    * @return {?Object}
+    *
+    * @description
+    * Normalizes the given path, returning a regular expression
+    * and the original path.
+    *
+    * Inspired by pathRexp in visionmedia/express/lib/utils.js.
+    */
+  function pathRegExp(path, opts) {
+    var insensitive = opts.caseInsensitiveMatch,
+        ret = {
+          originalPath: path,
+          regexp: path
+        },
+        keys = ret.keys = [];
+
+    path = path
+      .replace(/([().])/g, '\\$1')
+      .replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option) {
+        var optional = option === '?' ? option : null;
+        var star = option === '*' ? option : null;
+        keys.push({ name: key, optional: !!optional });
+        slash = slash || '';
+        return ''
+          + (optional ? '' : slash)
+          + '(?:'
+          + (optional ? slash : '')
+          + (star && '(.+?)' || '([^/]+)')
+          + (optional || '')
+          + ')'
+          + (optional || '');
+      })
+      .replace(/([\/$\*])/g, '\\$1');
+
+    ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : '');
+    return ret;
+  }
+
+  /**
+   * @ngdoc method
+   * @name $routeProvider#otherwise
+   *
+   * @description
+   * Sets route definition that will be used on route change when no other route definition
+   * is matched.
+   *
+   * @param {Object|string} params Mapping information to be assigned to `$route.current`.
+   * If called with a string, the value maps to `redirectTo`.
+   * @returns {Object} self
+   */
+  this.otherwise = function(params) {
+    if (typeof params === 'string') {
+      params = {redirectTo: params};
+    }
+    this.when(null, params);
+    return this;
+  };
+
+
+  this.$get = ['$rootScope',
+               '$location',
+               '$routeParams',
+               '$q',
+               '$injector',
+               '$templateRequest',
+               '$sce',
+      function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce) {
+
+    /**
+     * @ngdoc service
+     * @name $route
+     * @requires $location
+     * @requires $routeParams
+     *
+     * @property {Object} current Reference to the current route definition.
+     * The route definition contains:
+     *
+     *   - `controller`: The controller constructor as defined in the route definition.
+     *   - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for
+     *     controller instantiation. The `locals` contain
+     *     the resolved values of the `resolve` map. Additionally the `locals` also contain:
+     *
+     *     - `$scope` - The current route scope.
+     *     - `$template` - The current route template HTML.
+     *
+     *     The `locals` will be assigned to the route scope's `$resolve` property. You can override
+     *     the property name, using `resolveAs` in the route definition. See
+     *     {@link ngRoute.$routeProvider $routeProvider} for more info.
+     *
+     * @property {Object} routes Object with all route configuration Objects as its properties.
+     *
+     * @description
+     * `$route` is used for deep-linking URLs to controllers and views (HTML partials).
+     * It watches `$location.url()` and tries to map the path to an existing route definition.
+     *
+     * Requires the {@link ngRoute `ngRoute`} module to be installed.
+     *
+     * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.
+     *
+     * The `$route` service is typically used in conjunction with the
+     * {@link ngRoute.directive:ngView `ngView`} directive and the
+     * {@link ngRoute.$routeParams `$routeParams`} service.
+     *
+     * @example
+     * This example shows how changing the URL hash causes the `$route` to match a route against the
+     * URL, and the `ngView` pulls in the partial.
+     *
+     * <example name="$route-service" module="ngRouteExample"
+     *          deps="angular-route.js" fixBase="true">
+     *   <file name="index.html">
+     *     <div ng-controller="MainController">
+     *       Choose:
+     *       <a href="Book/Moby">Moby</a> |
+     *       <a href="Book/Moby/ch/1">Moby: Ch1</a> |
+     *       <a href="Book/Gatsby">Gatsby</a> |
+     *       <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
+     *       <a href="Book/Scarlet">Scarlet Letter</a><br/>
+     *
+     *       <div ng-view></div>
+     *
+     *       <hr />
+     *
+     *       <pre>$location.path() = {{$location.path()}}</pre>
+     *       <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre>
+     *       <pre>$route.current.params = {{$route.current.params}}</pre>
+     *       <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre>
+     *       <pre>$routeParams = {{$routeParams}}</pre>
+     *     </div>
+     *   </file>
+     *
+     *   <file name="book.html">
+     *     controller: {{name}}<br />
+     *     Book Id: {{params.bookId}}<br />
+     *   </file>
+     *
+     *   <file name="chapter.html">
+     *     controller: {{name}}<br />
+     *     Book Id: {{params.bookId}}<br />
+     *     Chapter Id: {{params.chapterId}}
+     *   </file>
+     *
+     *   <file name="script.js">
+     *     angular.module('ngRouteExample', ['ngRoute'])
+     *
+     *      .controller('MainController', function($scope, $route, $routeParams, $location) {
+     *          $scope.$route = $route;
+     *          $scope.$location = $location;
+     *          $scope.$routeParams = $routeParams;
+     *      })
+     *
+     *      .controller('BookController', function($scope, $routeParams) {
+     *          $scope.name = "BookController";
+     *          $scope.params = $routeParams;
+     *      })
+     *
+     *      .controller('ChapterController', function($scope, $routeParams) {
+     *          $scope.name = "ChapterController";
+     *          $scope.params = $routeParams;
+     *      })
+     *
+     *     .config(function($routeProvider, $locationProvider) {
+     *       $routeProvider
+     *        .when('/Book/:bookId', {
+     *         templateUrl: 'book.html',
+     *         controller: 'BookController',
+     *         resolve: {
+     *           // I will cause a 1 second delay
+     *           delay: function($q, $timeout) {
+     *             var delay = $q.defer();
+     *             $timeout(delay.resolve, 1000);
+     *             return delay.promise;
+     *           }
+     *         }
+     *       })
+     *       .when('/Book/:bookId/ch/:chapterId', {
+     *         templateUrl: 'chapter.html',
+     *         controller: 'ChapterController'
+     *       });
+     *
+     *       // configure html5 to get links working on jsfiddle
+     *       $locationProvider.html5Mode(true);
+     *     });
+     *
+     *   </file>
+     *
+     *   <file name="protractor.js" type="protractor">
+     *     it('should load and compile correct template', function() {
+     *       element(by.linkText('Moby: Ch1')).click();
+     *       var content = element(by.css('[ng-view]')).getText();
+     *       expect(content).toMatch(/controller\: ChapterController/);
+     *       expect(content).toMatch(/Book Id\: Moby/);
+     *       expect(content).toMatch(/Chapter Id\: 1/);
+     *
+     *       element(by.partialLinkText('Scarlet')).click();
+     *
+     *       content = element(by.css('[ng-view]')).getText();
+     *       expect(content).toMatch(/controller\: BookController/);
+     *       expect(content).toMatch(/Book Id\: Scarlet/);
+     *     });
+     *   </file>
+     * </example>
+     */
+
+    /**
+     * @ngdoc event
+     * @name $route#$routeChangeStart
+     * @eventType broadcast on root scope
+     * @description
+     * Broadcasted before a route change. At this  point the route services starts
+     * resolving all of the dependencies needed for the route change to occur.
+     * Typically this involves fetching the view template as well as any dependencies
+     * defined in `resolve` route property. Once  all of the dependencies are resolved
+     * `$routeChangeSuccess` is fired.
+     *
+     * The route change (and the `$location` change that triggered it) can be prevented
+     * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on}
+     * for more details about event object.
+     *
+     * @param {Object} angularEvent Synthetic event object.
+     * @param {Route} next Future route information.
+     * @param {Route} current Current route information.
+     */
+
+    /**
+     * @ngdoc event
+     * @name $route#$routeChangeSuccess
+     * @eventType broadcast on root scope
+     * @description
+     * Broadcasted after a route change has happened successfully.
+     * The `resolve` dependencies are now available in the `current.locals` property.
+     *
+     * {@link ngRoute.directive:ngView ngView} listens for the directive
+     * to instantiate the controller and render the view.
+     *
+     * @param {Object} angularEvent Synthetic event object.
+     * @param {Route} current Current route information.
+     * @param {Route|Undefined} previous Previous route information, or undefined if current is
+     * first route entered.
+     */
+
+    /**
+     * @ngdoc event
+     * @name $route#$routeChangeError
+     * @eventType broadcast on root scope
+     * @description
+     * Broadcasted if any of the resolve promises are rejected.
+     *
+     * @param {Object} angularEvent Synthetic event object
+     * @param {Route} current Current route information.
+     * @param {Route} previous Previous route information.
+     * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise.
+     */
+
+    /**
+     * @ngdoc event
+     * @name $route#$routeUpdate
+     * @eventType broadcast on root scope
+     * @description
+     * The `reloadOnSearch` property has been set to false, and we are reusing the same
+     * instance of the Controller.
+     *
+     * @param {Object} angularEvent Synthetic event object
+     * @param {Route} current Current/previous route information.
+     */
+
+    var forceReload = false,
+        preparedRoute,
+        preparedRouteIsUpdateOnly,
+        $route = {
+          routes: routes,
+
+          /**
+           * @ngdoc method
+           * @name $route#reload
+           *
+           * @description
+           * Causes `$route` service to reload the current route even if
+           * {@link ng.$location $location} hasn't changed.
+           *
+           * As a result of that, {@link ngRoute.directive:ngView ngView}
+           * creates new scope and reinstantiates the controller.
+           */
+          reload: function() {
+            forceReload = true;
+
+            var fakeLocationEvent = {
+              defaultPrevented: false,
+              preventDefault: function fakePreventDefault() {
+                this.defaultPrevented = true;
+                forceReload = false;
+              }
+            };
+
+            $rootScope.$evalAsync(function() {
+              prepareRoute(fakeLocationEvent);
+              if (!fakeLocationEvent.defaultPrevented) commitRoute();
+            });
+          },
+
+          /**
+           * @ngdoc method
+           * @name $route#updateParams
+           *
+           * @description
+           * Causes `$route` service to update the current URL, replacing
+           * current route parameters with those specified in `newParams`.
+           * Provided property names that match the route's path segment
+           * definitions will be interpolated into the location's path, while
+           * remaining properties will be treated as query params.
+           *
+           * @param {!Object<string, string>} newParams mapping of URL parameter names to values
+           */
+          updateParams: function(newParams) {
+            if (this.current && this.current.$$route) {
+              newParams = angular.extend({}, this.current.params, newParams);
+              $location.path(interpolate(this.current.$$route.originalPath, newParams));
+              // interpolate modifies newParams, only query params are left
+              $location.search(newParams);
+            } else {
+              throw $routeMinErr('norout', 'Tried updating route when with no current route');
+            }
+          }
+        };
+
+    $rootScope.$on('$locationChangeStart', prepareRoute);
+    $rootScope.$on('$locationChangeSuccess', commitRoute);
+
+    return $route;
+
+    /////////////////////////////////////////////////////
+
+    /**
+     * @param on {string} current url
+     * @param route {Object} route regexp to match the url against
+     * @return {?Object}
+     *
+     * @description
+     * Check if the route matches the current url.
+     *
+     * Inspired by match in
+     * visionmedia/express/lib/router/router.js.
+     */
+    function switchRouteMatcher(on, route) {
+      var keys = route.keys,
+          params = {};
+
+      if (!route.regexp) return null;
+
+      var m = route.regexp.exec(on);
+      if (!m) return null;
+
+      for (var i = 1, len = m.length; i < len; ++i) {
+        var key = keys[i - 1];
+
+        var val = m[i];
+
+        if (key && val) {
+          params[key.name] = val;
+        }
+      }
+      return params;
+    }
+
+    function prepareRoute($locationEvent) {
+      var lastRoute = $route.current;
+
+      preparedRoute = parseRoute();
+      preparedRouteIsUpdateOnly = preparedRoute && lastRoute && preparedRoute.$$route === lastRoute.$$route
+          && angular.equals(preparedRoute.pathParams, lastRoute.pathParams)
+          && !preparedRoute.reloadOnSearch && !forceReload;
+
+      if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) {
+        if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) {
+          if ($locationEvent) {
+            $locationEvent.preventDefault();
+          }
+        }
+      }
+    }
+
+    function commitRoute() {
+      var lastRoute = $route.current;
+      var nextRoute = preparedRoute;
+
+      if (preparedRouteIsUpdateOnly) {
+        lastRoute.params = nextRoute.params;
+        angular.copy(lastRoute.params, $routeParams);
+        $rootScope.$broadcast('$routeUpdate', lastRoute);
+      } else if (nextRoute || lastRoute) {
+        forceReload = false;
+        $route.current = nextRoute;
+        if (nextRoute) {
+          if (nextRoute.redirectTo) {
+            if (angular.isString(nextRoute.redirectTo)) {
+              $location.path(interpolate(nextRoute.redirectTo, nextRoute.params)).search(nextRoute.params)
+                       .replace();
+            } else {
+              $location.url(nextRoute.redirectTo(nextRoute.pathParams, $location.path(), $location.search()))
+                       .replace();
+            }
+          }
+        }
+
+        $q.when(nextRoute).
+          then(function() {
+            if (nextRoute) {
+              var locals = angular.extend({}, nextRoute.resolve),
+                  template, templateUrl;
+
+              angular.forEach(locals, function(value, key) {
+                locals[key] = angular.isString(value) ?
+                    $injector.get(value) : $injector.invoke(value, null, null, key);
+              });
+
+              if (angular.isDefined(template = nextRoute.template)) {
+                if (angular.isFunction(template)) {
+                  template = template(nextRoute.params);
+                }
+              } else if (angular.isDefined(templateUrl = nextRoute.templateUrl)) {
+                if (angular.isFunction(templateUrl)) {
+                  templateUrl = templateUrl(nextRoute.params);
+                }
+                if (angular.isDefined(templateUrl)) {
+                  nextRoute.loadedTemplateUrl = $sce.valueOf(templateUrl);
+                  template = $templateRequest(templateUrl);
+                }
+              }
+              if (angular.isDefined(template)) {
+                locals['$template'] = template;
+              }
+              return $q.all(locals);
+            }
+          }).
+          then(function(locals) {
+            // after route change
+            if (nextRoute == $route.current) {
+              if (nextRoute) {
+                nextRoute.locals = locals;
+                angular.copy(nextRoute.params, $routeParams);
+              }
+              $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute);
+            }
+          }, function(error) {
+            if (nextRoute == $route.current) {
+              $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error);
+            }
+          });
+      }
+    }
+
+
+    /**
+     * @returns {Object} the current active route, by matching it against the URL
+     */
+    function parseRoute() {
+      // Match a route
+      var params, match;
+      angular.forEach(routes, function(route, path) {
+        if (!match && (params = switchRouteMatcher($location.path(), route))) {
+          match = inherit(route, {
+            params: angular.extend({}, $location.search(), params),
+            pathParams: params});
+          match.$$route = route;
+        }
+      });
+      // No route matched; fallback to "otherwise" route
+      return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});
+    }
+
+    /**
+     * @returns {string} interpolation of the redirect path with the parameters
+     */
+    function interpolate(string, params) {
+      var result = [];
+      angular.forEach((string || '').split(':'), function(segment, i) {
+        if (i === 0) {
+          result.push(segment);
+        } else {
+          var segmentMatch = segment.match(/(\w+)(?:[?*])?(.*)/);
+          var key = segmentMatch[1];
+          result.push(params[key]);
+          result.push(segmentMatch[2] || '');
+          delete params[key];
+        }
+      });
+      return result.join('');
+    }
+  }];
+}
+
+ngRouteModule.provider('$routeParams', $RouteParamsProvider);
+
+
+/**
+ * @ngdoc service
+ * @name $routeParams
+ * @requires $route
+ *
+ * @description
+ * The `$routeParams` service allows you to retrieve the current set of route parameters.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * The route parameters are a combination of {@link ng.$location `$location`}'s
+ * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.
+ * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.
+ *
+ * In case of parameter name collision, `path` params take precedence over `search` params.
+ *
+ * The service guarantees that the identity of the `$routeParams` object will remain unchanged
+ * (but its properties will likely change) even when a route change occurs.
+ *
+ * Note that the `$routeParams` are only updated *after* a route change completes successfully.
+ * This means that you cannot rely on `$routeParams` being correct in route resolve functions.
+ * Instead you can use `$route.current.params` to access the new route's parameters.
+ *
+ * @example
+ * ```js
+ *  // Given:
+ *  // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
+ *  // Route: /Chapter/:chapterId/Section/:sectionId
+ *  //
+ *  // Then
+ *  $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}
+ * ```
+ */
+function $RouteParamsProvider() {
+  this.$get = function() { return {}; };
+}
+
+ngRouteModule.directive('ngView', ngViewFactory);
+ngRouteModule.directive('ngView', ngViewFillContentFactory);
+
+
+/**
+ * @ngdoc directive
+ * @name ngView
+ * @restrict ECA
+ *
+ * @description
+ * # Overview
+ * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by
+ * including the rendered template of the current route into the main layout (`index.html`) file.
+ * Every time the current route changes, the included view changes with it according to the
+ * configuration of the `$route` service.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * @animations
+ * enter - animation is used to bring new content into the browser.
+ * leave - animation is used to animate existing content away.
+ *
+ * The enter and leave animation occur concurrently.
+ *
+ * @scope
+ * @priority 400
+ * @param {string=} onload Expression to evaluate whenever the view updates.
+ *
+ * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll
+ *                  $anchorScroll} to scroll the viewport after the view is updated.
+ *
+ *                  - If the attribute is not set, disable scrolling.
+ *                  - If the attribute is set without value, enable scrolling.
+ *                  - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated
+ *                    as an expression yields a truthy value.
+ * @example
+    <example name="ngView-directive" module="ngViewExample"
+             deps="angular-route.js;angular-animate.js"
+             animations="true" fixBase="true">
+      <file name="index.html">
+        <div ng-controller="MainCtrl as main">
+          Choose:
+          <a href="Book/Moby">Moby</a> |
+          <a href="Book/Moby/ch/1">Moby: Ch1</a> |
+          <a href="Book/Gatsby">Gatsby</a> |
+          <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
+          <a href="Book/Scarlet">Scarlet Letter</a><br/>
+
+          <div class="view-animate-container">
+            <div ng-view class="view-animate"></div>
+          </div>
+          <hr />
+
+          <pre>$location.path() = {{main.$location.path()}}</pre>
+          <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre>
+          <pre>$route.current.params = {{main.$route.current.params}}</pre>
+          <pre>$routeParams = {{main.$routeParams}}</pre>
+        </div>
+      </file>
+
+      <file name="book.html">
+        <div>
+          controller: {{book.name}}<br />
+          Book Id: {{book.params.bookId}}<br />
+        </div>
+      </file>
+
+      <file name="chapter.html">
+        <div>
+          controller: {{chapter.name}}<br />
+          Book Id: {{chapter.params.bookId}}<br />
+          Chapter Id: {{chapter.params.chapterId}}
+        </div>
+      </file>
+
+      <file name="animations.css">
+        .view-animate-container {
+          position:relative;
+          height:100px!important;
+          background:white;
+          border:1px solid black;
+          height:40px;
+          overflow:hidden;
+        }
+
+        .view-animate {
+          padding:10px;
+        }
+
+        .view-animate.ng-enter, .view-animate.ng-leave {
+          transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+
+          display:block;
+          width:100%;
+          border-left:1px solid black;
+
+          position:absolute;
+          top:0;
+          left:0;
+          right:0;
+          bottom:0;
+          padding:10px;
+        }
+
+        .view-animate.ng-enter {
+          left:100%;
+        }
+        .view-animate.ng-enter.ng-enter-active {
+          left:0;
+        }
+        .view-animate.ng-leave.ng-leave-active {
+          left:-100%;
+        }
+      </file>
+
+      <file name="script.js">
+        angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])
+          .config(['$routeProvider', '$locationProvider',
+            function($routeProvider, $locationProvider) {
+              $routeProvider
+                .when('/Book/:bookId', {
+                  templateUrl: 'book.html',
+                  controller: 'BookCtrl',
+                  controllerAs: 'book'
+                })
+                .when('/Book/:bookId/ch/:chapterId', {
+                  templateUrl: 'chapter.html',
+                  controller: 'ChapterCtrl',
+                  controllerAs: 'chapter'
+                });
+
+              $locationProvider.html5Mode(true);
+          }])
+          .controller('MainCtrl', ['$route', '$routeParams', '$location',
+            function($route, $routeParams, $location) {
+              this.$route = $route;
+              this.$location = $location;
+              this.$routeParams = $routeParams;
+          }])
+          .controller('BookCtrl', ['$routeParams', function($routeParams) {
+            this.name = "BookCtrl";
+            this.params = $routeParams;
+          }])
+          .controller('ChapterCtrl', ['$routeParams', function($routeParams) {
+            this.name = "ChapterCtrl";
+            this.params = $routeParams;
+          }]);
+
+      </file>
+
+      <file name="protractor.js" type="protractor">
+        it('should load and compile correct template', function() {
+          element(by.linkText('Moby: Ch1')).click();
+          var content = element(by.css('[ng-view]')).getText();
+          expect(content).toMatch(/controller\: ChapterCtrl/);
+          expect(content).toMatch(/Book Id\: Moby/);
+          expect(content).toMatch(/Chapter Id\: 1/);
+
+          element(by.partialLinkText('Scarlet')).click();
+
+          content = element(by.css('[ng-view]')).getText();
+          expect(content).toMatch(/controller\: BookCtrl/);
+          expect(content).toMatch(/Book Id\: Scarlet/);
+        });
+      </file>
+    </example>
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngView#$viewContentLoaded
+ * @eventType emit on the current ngView scope
+ * @description
+ * Emitted every time the ngView content is reloaded.
+ */
+ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];
+function ngViewFactory($route, $anchorScroll, $animate) {
+  return {
+    restrict: 'ECA',
+    terminal: true,
+    priority: 400,
+    transclude: 'element',
+    link: function(scope, $element, attr, ctrl, $transclude) {
+        var currentScope,
+            currentElement,
+            previousLeaveAnimation,
+            autoScrollExp = attr.autoscroll,
+            onloadExp = attr.onload || '';
+
+        scope.$on('$routeChangeSuccess', update);
+        update();
+
+        function cleanupLastView() {
+          if (previousLeaveAnimation) {
+            $animate.cancel(previousLeaveAnimation);
+            previousLeaveAnimation = null;
+          }
+
+          if (currentScope) {
+            currentScope.$destroy();
+            currentScope = null;
+          }
+          if (currentElement) {
+            previousLeaveAnimation = $animate.leave(currentElement);
+            previousLeaveAnimation.then(function() {
+              previousLeaveAnimation = null;
+            });
+            currentElement = null;
+          }
+        }
+
+        function update() {
+          var locals = $route.current && $route.current.locals,
+              template = locals && locals.$template;
+
+          if (angular.isDefined(template)) {
+            var newScope = scope.$new();
+            var current = $route.current;
+
+            // Note: This will also link all children of ng-view that were contained in the original
+            // html. If that content contains controllers, ... they could pollute/change the scope.
+            // However, using ng-view on an element with additional content does not make sense...
+            // Note: We can't remove them in the cloneAttchFn of $transclude as that
+            // function is called before linking the content, which would apply child
+            // directives to non existing elements.
+            var clone = $transclude(newScope, function(clone) {
+              $animate.enter(clone, null, currentElement || $element).then(function onNgViewEnter() {
+                if (angular.isDefined(autoScrollExp)
+                  && (!autoScrollExp || scope.$eval(autoScrollExp))) {
+                  $anchorScroll();
+                }
+              });
+              cleanupLastView();
+            });
+
+            currentElement = clone;
+            currentScope = current.scope = newScope;
+            currentScope.$emit('$viewContentLoaded');
+            currentScope.$eval(onloadExp);
+          } else {
+            cleanupLastView();
+          }
+        }
+    }
+  };
+}
+
+// This directive is called during the $transclude call of the first `ngView` directive.
+// It will replace and compile the content of the element with the loaded template.
+// We need this directive so that the element content is already filled when
+// the link function of another directive on the same element as ngView
+// is called.
+ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];
+function ngViewFillContentFactory($compile, $controller, $route) {
+  return {
+    restrict: 'ECA',
+    priority: -400,
+    link: function(scope, $element) {
+      var current = $route.current,
+          locals = current.locals;
+
+      $element.html(locals.$template);
+
+      var link = $compile($element.contents());
+
+      if (current.controller) {
+        locals.$scope = scope;
+        var controller = $controller(current.controller, locals);
+        if (current.controllerAs) {
+          scope[current.controllerAs] = controller;
+        }
+        $element.data('$ngControllerController', controller);
+        $element.children().data('$ngControllerController', controller);
+      }
+      scope[current.resolveAs || '$resolve'] = locals;
+
+      link(scope);
+    }
+  };
+}
+
+
+})(window, window.angular);


[35/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/errors.json
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/errors.json b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/errors.json
new file mode 100644
index 0000000..abb6b94
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/errors.json
@@ -0,0 +1 @@
+{"id":"ng","generated":"Fri Feb 05 2016 03:40:34 GMT-0800 (PST)","errors":{"ng":{"areq":"Argument '{0}' is {1}","cpta":"Can't copy! TypedArray destination cannot be mutated.","test":"no injector found for element argument to getTestability","cpws":"Can't copy! Making copies of Window or Scope instances is not supported.","btstrpd":"App Already Bootstrapped with this Element '{0}'","cpi":"Can't copy! Source and destination are identical.","badname":"hasOwnProperty is not a valid {0} name"},"$http":{"legacy":"The method `{0}` on the promise returned from `$http` has been disabled.","badreq":"Http request configuration url must be a string.  Received: {0}"},"ngRepeat":{"badident":"alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.","iexp":"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.","dupes":"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate 
 key: {1}, Duplicate value: {2}","iidexp":"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'."},"$sce":{"imatcher":"Matchers may only be \"self\", string patterns or RegExp objects","icontext":"Attempted to trust a value in invalid context. Context: {0}; Value: {1}","iwcard":"Illegal sequence *** in string matcher.  String: {0}","insecurl":"Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}","iequirks":"Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.","unsafe":"Attempting to use an unsafe value in a safe context.","itype":"Attempted to trust a non-string value in a content requiring a string: Context: {0}"},"ngPattern":{"noregexp":"Expected {0} to be a RegExp but was {1}. Element: {2}"},"$controller":{"ctr
 lfmt":"Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.","noscp":"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`."},"$parse":{"isecfn":"Referencing Function in Angular expressions is disallowed! Expression: {0}","isecwindow":"Referencing the Window in Angular expressions is disallowed! Expression: {0}","ueoe":"Unexpected end of expression: {0}","isecdom":"Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}","lexerr":"Lexer Error: {0} at column{1} in expression [{2}].","esc":"IMPOSSIBLE","isecobj":"Referencing Object in Angular expressions is disallowed! Expression: {0}","lval":"Trying to assign a value to a non l-value","isecff":"Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}","syntax":"Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].","isecaf":"Assigning to a constructor is disallowed! Expression: {0}","isecfld":"A
 ttempting to access a disallowed field in Angular expressions! Expression: {0}"},"orderBy":{"notarray":"Expected array but received: {0}"},"jqLite":{"offargs":"jqLite#off() does not support the `selector` argument","onargs":"jqLite#on() does not support the `selector` or `eventData` parameters","nosel":"Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element"},"$animate":{"notcsel":"Expecting class selector starting with '.' got '{0}'.","nongcls":"$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the \"{0}\" CSS class."},"$q":{"norslvr":"Expected resolverFn, got '{0}'","qcycle":"Expected promise to be resolved with value other than itself '{0}'"},"$injector":{"pget":"Provider '{0}' must define $get factory method.","cdep":"Circular dependency found: {0}","nomod":"Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensu
 re that you specify the dependencies as the second argument.","strictdi":"{0} is not using explicit annotation and cannot be invoked in strict mode","modulerr":"Failed to instantiate module {0} due to:\n{1}","undef":"Provider '{0}' must return a value from $get factory method.","unpr":"Unknown provider: {0}","itkn":"Incorrect injection token! Expected service name as string, got {0}"},"filter":{"notarray":"Expected array but received: {0}"},"ngTransclude":{"orphan":"Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}"},"ngModel":{"nopromise":"Expected asynchronous validator to return a promise but got '{0}' instead.","nonassign":"Expression '{0}' is non-assignable. Element: {1}","datefmt":"Expected `{0}` to be a date","constexpr":"Expected constant expression for `{0}`, but saw `{1}`.","numfmt":"Expected `{0}` to be a number"},"$location":{"nostate":"History API state support is available only in HTML5 mode and 
 only in browsers supporting HTML5 History API","ipthprfx":"Invalid url \"{0}\", missing path prefix \"{1}\".","isrcharg":"The first argument of the `$location#search()` call must be a string or an object.","nobase":"$location in HTML5 mode requires a <base> tag to be present!"},"$cacheFactory":{"iid":"CacheId '{0}' is already taken!"},"$interpolate":{"noconcat":"Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce","interr":"Can't interpolate: {0}\n{1}","nochgmustache":"angular-message-format.js currently does not allow you to use custom start and end symbols for interpolation.","reqcomma":"Expected a comma after the keyword \u201c{0}\u201d at line {1}, column {2} of text \u201c{3}\u201d","untermstr":"The string beginning at line {0}, column {1} is unterminated in text \u201c{2}\u201d","badexpr":"Unexpected operator \u201c{0}\u201d at line {1}, column {2} in text
 . Was expecting \u201c{3}\u201d. Text: \u201c{4}\u201d","dupvalue":"The choice \u201c{0}\u201d is specified more than once. Duplicate key is at line {1}, column {2} in text \u201c{3}\u201d","unsafe":"Use of select/plural MessageFormat syntax is currently disallowed in a secure context ({0}).  At line {1}, column {2} of text \u201c{3}\u201d","reqother":"\u201cother\u201d is a required option.","reqendinterp":"Expecting end of interpolation symbol, \u201c{0}\u201d, at line {1}, column {2} in text \u201c{3}\u201d","reqarg":"Expected one of \u201cplural\u201d or \u201cselect\u201d at line {0}, column {1} of text \u201c{2}\u201d","wantstring":"Expected the beginning of a string at line {0}, column {1} in text \u201c{2}\u201d","logicbug":"The messageformat parser has encountered an internal error.  Please file a github issue against the AngularJS project and provide this message text that triggers the bug.  Text: \u201c{0}\u201d","reqopenbrace":"The plural choice \u201c{0}\u201d must be followed by a message in braces at line {1}, column {2} in text \u201c{3}\u201d","unknarg":
 "Unsupported keyword \u201c{0}\u201d at line {0}, column {1}. Only \u201cplural\u201d and \u201cselect\u201d are currently supported.  Text: \u201c{3}\u201d","reqendbrace":"The plural/select choice \u201c{0}\u201d message starting at line {1}, column {2} does not have an ending closing brace. Text \u201c{3}\u201d"},"ngOptions":{"iexp":"Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}"},"$rootScope":{"inprog":"{0} already in progress","infdig":"{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}"},"$compile":{"noident":"Cannot bind to controller without identifier for directive '{0}'.","selmulti":"Binding to the 'multiple' attribute is not supported. Element: {0}","ctreq":"Controller '{0}', required by directive '{1}', can't be found!","tplrt":"Template for directive '{0}' must have exactly one root element. {1}","iscp":"Invalid {3} for directive '{0}'. Definition: {... {1}: '{2}' ...}","baddir":"Directive name
  '{0}' is invalid. The name should not contain leading or trailing whitespaces","noctrl":"Cannot bind to controller without directive '{0}'s controller.","multidir":"Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}","tpload":"Failed to load template: {0} (HTTP status: {1} {2})","uterdir":"Unterminated attribute, found '{0}' but no matching '{1}' found.","reqslot":"Required transclusion slot `{0}` was not filled.","nodomevents":"Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.","nonassign":"Expression '{0}' in attribute '{1}' used with directive '{2}' is non-assignable!","noslot":"No parent directive that requires a transclusion with slot name \"{0}\". Element: {1}"},"$resource":{"badargs":"Expected up to 4 arguments [params, data, success, error], got {0} arguments","badmember":"Dotted member path \"@{0}\" is invalid.","badname":"hasOwnProperty is not a valid parameter name.","badcfg":
 "Error in resource configuration for action `{0}`. Expected response to contain an {1} but got an {2} (Request: {3} {4})"},"$route":{"norout":"Tried updating route when with no current route"},"linky":{"notstring":"Expected string but received: {0}"},"$sanitize":{"noinert":"Can't create an inert html document","uinput":"Failed to sanitize html because the input is unstable"}}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-dj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-dj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-dj.js
new file mode 100644
index 0000000..2fe0c30
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-dj.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "saaku",
+      "carra"
+    ],
+    "DAY": [
+      "Acaada",
+      "Etleeni",
+      "Talaata",
+      "Arbaqa",
+      "Kamiisi",
+      "Gumqata",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "ERAS": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "Qunxa Garablu",
+      "Kudo",
+      "Ciggilta Kudo",
+      "Agda Baxis",
+      "Caxah Alsa",
+      "Qasa Dirri",
+      "Qado Dirri",
+      "Leqeeni",
+      "Waysu",
+      "Diteli",
+      "Ximoli",
+      "Kaxxa Garablu"
+    ],
+    "SHORTDAY": [
+      "Aca",
+      "Etl",
+      "Tal",
+      "Arb",
+      "Kam",
+      "Gum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qun",
+      "Nah",
+      "Cig",
+      "Agd",
+      "Cax",
+      "Qas",
+      "Qad",
+      "Leq",
+      "Way",
+      "Dit",
+      "Xim",
+      "Kax"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Fdj",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "aa-dj",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-er.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-er.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-er.js
new file mode 100644
index 0000000..48c1e7c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-er.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "saaku",
+      "carra"
+    ],
+    "DAY": [
+      "Acaada",
+      "Etleeni",
+      "Talaata",
+      "Arbaqa",
+      "Kamiisi",
+      "Gumqata",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "ERAS": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Qunxa Garablu",
+      "Kudo",
+      "Ciggilta Kudo",
+      "Agda Baxis",
+      "Caxah Alsa",
+      "Qasa Dirri",
+      "Qado Dirri",
+      "Liiqen",
+      "Waysu",
+      "Diteli",
+      "Ximoli",
+      "Kaxxa Garablu"
+    ],
+    "SHORTDAY": [
+      "Aca",
+      "Etl",
+      "Tal",
+      "Arb",
+      "Kam",
+      "Gum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qun",
+      "Nah",
+      "Cig",
+      "Agd",
+      "Cax",
+      "Qas",
+      "Qad",
+      "Leq",
+      "Way",
+      "Dit",
+      "Xim",
+      "Kax"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "aa-er",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-et.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-et.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-et.js
new file mode 100644
index 0000000..03b6255
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa-et.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "saaku",
+      "carra"
+    ],
+    "DAY": [
+      "Acaada",
+      "Etleeni",
+      "Talaata",
+      "Arbaqa",
+      "Kamiisi",
+      "Gumqata",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "ERAS": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Qunxa Garablu",
+      "Kudo",
+      "Ciggilta Kudo",
+      "Agda Baxis",
+      "Caxah Alsa",
+      "Qasa Dirri",
+      "Qado Dirri",
+      "Liiqen",
+      "Waysu",
+      "Diteli",
+      "Ximoli",
+      "Kaxxa Garablu"
+    ],
+    "SHORTDAY": [
+      "Aca",
+      "Etl",
+      "Tal",
+      "Arb",
+      "Kam",
+      "Gum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qun",
+      "Nah",
+      "Cig",
+      "Agd",
+      "Cax",
+      "Qas",
+      "Qad",
+      "Leq",
+      "Way",
+      "Dit",
+      "Xim",
+      "Kax"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "aa-et",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa.js
new file mode 100644
index 0000000..661fa2e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_aa.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "saaku",
+      "carra"
+    ],
+    "DAY": [
+      "Acaada",
+      "Etleeni",
+      "Talaata",
+      "Arbaqa",
+      "Kamiisi",
+      "Gumqata",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "ERAS": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Qunxa Garablu",
+      "Kudo",
+      "Ciggilta Kudo",
+      "Agda Baxis",
+      "Caxah Alsa",
+      "Qasa Dirri",
+      "Qado Dirri",
+      "Liiqen",
+      "Waysu",
+      "Diteli",
+      "Ximoli",
+      "Kaxxa Garablu"
+    ],
+    "SHORTDAY": [
+      "Aca",
+      "Etl",
+      "Tal",
+      "Arb",
+      "Kam",
+      "Gum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qun",
+      "Nah",
+      "Cig",
+      "Agd",
+      "Cax",
+      "Qas",
+      "Qad",
+      "Leq",
+      "Way",
+      "Dit",
+      "Xim",
+      "Kax"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "aa",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-na.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-na.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-na.js
new file mode 100644
index 0000000..32b9181
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-na.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vm.",
+      "nm."
+    ],
+    "DAY": [
+      "Sondag",
+      "Maandag",
+      "Dinsdag",
+      "Woensdag",
+      "Donderdag",
+      "Vrydag",
+      "Saterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.C.",
+      "n.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januarie",
+      "Februarie",
+      "Maart",
+      "April",
+      "Mei",
+      "Junie",
+      "Julie",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "SHORTDAY": [
+      "So",
+      "Ma",
+      "Di",
+      "Wo",
+      "Do",
+      "Vr",
+      "Sa"
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "Mrt.",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januarie",
+      "Februarie",
+      "Maart",
+      "April",
+      "Mei",
+      "Junie",
+      "Julie",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "af-na",
+  "localeID": "af_NA",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-za.js
new file mode 100644
index 0000000..b667ded
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af-za.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vm.",
+      "nm."
+    ],
+    "DAY": [
+      "Sondag",
+      "Maandag",
+      "Dinsdag",
+      "Woensdag",
+      "Donderdag",
+      "Vrydag",
+      "Saterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.C.",
+      "n.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januarie",
+      "Februarie",
+      "Maart",
+      "April",
+      "Mei",
+      "Junie",
+      "Julie",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "SHORTDAY": [
+      "So",
+      "Ma",
+      "Di",
+      "Wo",
+      "Do",
+      "Vr",
+      "Sa"
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "Mrt.",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januarie",
+      "Februarie",
+      "Maart",
+      "April",
+      "Mei",
+      "Junie",
+      "Julie",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd MMM y h:mm:ss a",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "y-MM-dd h:mm a",
+    "shortDate": "y-MM-dd",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "af-za",
+  "localeID": "af_ZA",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af.js
new file mode 100644
index 0000000..5c2e7f7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_af.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vm.",
+      "nm."
+    ],
+    "DAY": [
+      "Sondag",
+      "Maandag",
+      "Dinsdag",
+      "Woensdag",
+      "Donderdag",
+      "Vrydag",
+      "Saterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.C.",
+      "n.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januarie",
+      "Februarie",
+      "Maart",
+      "April",
+      "Mei",
+      "Junie",
+      "Julie",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "SHORTDAY": [
+      "So",
+      "Ma",
+      "Di",
+      "Wo",
+      "Do",
+      "Vr",
+      "Sa"
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "Mrt.",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januarie",
+      "Februarie",
+      "Maart",
+      "April",
+      "Mei",
+      "Junie",
+      "Julie",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd MMM y h:mm:ss a",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "y-MM-dd h:mm a",
+    "shortDate": "y-MM-dd",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "af",
+  "localeID": "af",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq-cm.js
new file mode 100644
index 0000000..102f5b2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.g",
+      "a.k"
+    ],
+    "DAY": [
+      "tsu\u0294nts\u0268",
+      "tsu\u0294ukp\u00e0",
+      "tsu\u0294ugh\u0254e",
+      "tsu\u0294ut\u0254\u0300ml\u00f2",
+      "tsu\u0294um\u00e8",
+      "tsu\u0294ugh\u0268\u0302m",
+      "tsu\u0294ndz\u0268k\u0254\u0294\u0254"
+    ],
+    "ERANAMES": [
+      "S\u011be K\u0268\u0300lesto",
+      "B\u01cea K\u0268\u0300lesto"
+    ],
+    "ERAS": [
+      "SK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ndz\u0254\u0300\u014b\u0254\u0300n\u00f9m",
+      "ndz\u0254\u0300\u014b\u0254\u0300k\u0197\u0300z\u00f9\u0294",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300d\u0289\u0300gh\u00e0",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u01ceaf\u0289\u0304gh\u0101",
+      "ndz\u0254\u0300\u014b\u00e8s\u00e8e",
+      "ndz\u0254\u0300\u014b\u0254\u0300nz\u00f9gh\u00f2",
+      "ndz\u0254\u0300\u014b\u0254\u0300d\u00f9mlo",
+      "ndz\u0254\u0300\u014b\u0254\u0300kw\u00eef\u0254\u0300e",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300f\u0289\u0300gh\u00e0dzugh\u00f9",
+      "ndz\u0254\u0300\u014b\u0254\u0300gh\u01d4uwel\u0254\u0300m",
+      "ndz\u0254\u0300\u014b\u0254\u0300chwa\u0294\u00e0kaa wo",
+      "ndz\u0254\u0300\u014b\u00e8fw\u00f2o"
+    ],
+    "SHORTDAY": [
+      "nts",
+      "kpa",
+      "gh\u0254",
+      "t\u0254m",
+      "ume",
+      "gh\u0268",
+      "dzk"
+    ],
+    "SHORTMONTH": [
+      "n\u00f9m",
+      "k\u0268z",
+      "t\u0268d",
+      "taa",
+      "see",
+      "nzu",
+      "dum",
+      "f\u0254e",
+      "dzu",
+      "l\u0254m",
+      "kaa",
+      "fwo"
+    ],
+    "STANDALONEMONTH": [
+      "ndz\u0254\u0300\u014b\u0254\u0300n\u00f9m",
+      "ndz\u0254\u0300\u014b\u0254\u0300k\u0197\u0300z\u00f9\u0294",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300d\u0289\u0300gh\u00e0",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u01ceaf\u0289\u0304gh\u0101",
+      "ndz\u0254\u0300\u014b\u00e8s\u00e8e",
+      "ndz\u0254\u0300\u014b\u0254\u0300nz\u00f9gh\u00f2",
+      "ndz\u0254\u0300\u014b\u0254\u0300d\u00f9mlo",
+      "ndz\u0254\u0300\u014b\u0254\u0300kw\u00eef\u0254\u0300e",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300f\u0289\u0300gh\u00e0dzugh\u00f9",
+      "ndz\u0254\u0300\u014b\u0254\u0300gh\u01d4uwel\u0254\u0300m",
+      "ndz\u0254\u0300\u014b\u0254\u0300chwa\u0294\u00e0kaa wo",
+      "ndz\u0254\u0300\u014b\u00e8fw\u00f2o"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "agq-cm",
+  "localeID": "agq_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq.js
new file mode 100644
index 0000000..cf57315
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_agq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.g",
+      "a.k"
+    ],
+    "DAY": [
+      "tsu\u0294nts\u0268",
+      "tsu\u0294ukp\u00e0",
+      "tsu\u0294ugh\u0254e",
+      "tsu\u0294ut\u0254\u0300ml\u00f2",
+      "tsu\u0294um\u00e8",
+      "tsu\u0294ugh\u0268\u0302m",
+      "tsu\u0294ndz\u0268k\u0254\u0294\u0254"
+    ],
+    "ERANAMES": [
+      "S\u011be K\u0268\u0300lesto",
+      "B\u01cea K\u0268\u0300lesto"
+    ],
+    "ERAS": [
+      "SK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ndz\u0254\u0300\u014b\u0254\u0300n\u00f9m",
+      "ndz\u0254\u0300\u014b\u0254\u0300k\u0197\u0300z\u00f9\u0294",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300d\u0289\u0300gh\u00e0",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u01ceaf\u0289\u0304gh\u0101",
+      "ndz\u0254\u0300\u014b\u00e8s\u00e8e",
+      "ndz\u0254\u0300\u014b\u0254\u0300nz\u00f9gh\u00f2",
+      "ndz\u0254\u0300\u014b\u0254\u0300d\u00f9mlo",
+      "ndz\u0254\u0300\u014b\u0254\u0300kw\u00eef\u0254\u0300e",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300f\u0289\u0300gh\u00e0dzugh\u00f9",
+      "ndz\u0254\u0300\u014b\u0254\u0300gh\u01d4uwel\u0254\u0300m",
+      "ndz\u0254\u0300\u014b\u0254\u0300chwa\u0294\u00e0kaa wo",
+      "ndz\u0254\u0300\u014b\u00e8fw\u00f2o"
+    ],
+    "SHORTDAY": [
+      "nts",
+      "kpa",
+      "gh\u0254",
+      "t\u0254m",
+      "ume",
+      "gh\u0268",
+      "dzk"
+    ],
+    "SHORTMONTH": [
+      "n\u00f9m",
+      "k\u0268z",
+      "t\u0268d",
+      "taa",
+      "see",
+      "nzu",
+      "dum",
+      "f\u0254e",
+      "dzu",
+      "l\u0254m",
+      "kaa",
+      "fwo"
+    ],
+    "STANDALONEMONTH": [
+      "ndz\u0254\u0300\u014b\u0254\u0300n\u00f9m",
+      "ndz\u0254\u0300\u014b\u0254\u0300k\u0197\u0300z\u00f9\u0294",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300d\u0289\u0300gh\u00e0",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u01ceaf\u0289\u0304gh\u0101",
+      "ndz\u0254\u0300\u014b\u00e8s\u00e8e",
+      "ndz\u0254\u0300\u014b\u0254\u0300nz\u00f9gh\u00f2",
+      "ndz\u0254\u0300\u014b\u0254\u0300d\u00f9mlo",
+      "ndz\u0254\u0300\u014b\u0254\u0300kw\u00eef\u0254\u0300e",
+      "ndz\u0254\u0300\u014b\u0254\u0300t\u0197\u0300f\u0289\u0300gh\u00e0dzugh\u00f9",
+      "ndz\u0254\u0300\u014b\u0254\u0300gh\u01d4uwel\u0254\u0300m",
+      "ndz\u0254\u0300\u014b\u0254\u0300chwa\u0294\u00e0kaa wo",
+      "ndz\u0254\u0300\u014b\u00e8fw\u00f2o"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "agq",
+  "localeID": "agq",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak-gh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak-gh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak-gh.js
new file mode 100644
index 0000000..c58c9a2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak-gh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AN",
+      "EW"
+    ],
+    "DAY": [
+      "Kwesida",
+      "Dwowda",
+      "Benada",
+      "Wukuda",
+      "Yawda",
+      "Fida",
+      "Memeneda"
+    ],
+    "ERANAMES": [
+      "Ansa Kristo",
+      "Kristo Ekyiri"
+    ],
+    "ERAS": [
+      "AK",
+      "KE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Sanda-\u0186p\u025bp\u0254n",
+      "Kwakwar-\u0186gyefuo",
+      "Eb\u0254w-\u0186benem",
+      "Eb\u0254bira-Oforisuo",
+      "Esusow Aketseaba-K\u0254t\u0254nimba",
+      "Obirade-Ay\u025bwohomumu",
+      "Ay\u025bwoho-Kitawonsa",
+      "Difuu-\u0186sandaa",
+      "Fankwa-\u0190b\u0254",
+      "\u0186b\u025bs\u025b-Ahinime",
+      "\u0186ber\u025bf\u025bw-Obubuo",
+      "Mumu-\u0186p\u025bnimba"
+    ],
+    "SHORTDAY": [
+      "Kwe",
+      "Dwo",
+      "Ben",
+      "Wuk",
+      "Yaw",
+      "Fia",
+      "Mem"
+    ],
+    "SHORTMONTH": [
+      "S-\u0186",
+      "K-\u0186",
+      "E-\u0186",
+      "E-O",
+      "E-K",
+      "O-A",
+      "A-K",
+      "D-\u0186",
+      "F-\u0190",
+      "\u0186-A",
+      "\u0186-O",
+      "M-\u0186"
+    ],
+    "STANDALONEMONTH": [
+      "Sanda-\u0186p\u025bp\u0254n",
+      "Kwakwar-\u0186gyefuo",
+      "Eb\u0254w-\u0186benem",
+      "Eb\u0254bira-Oforisuo",
+      "Esusow Aketseaba-K\u0254t\u0254nimba",
+      "Obirade-Ay\u025bwohomumu",
+      "Ay\u025bwoho-Kitawonsa",
+      "Difuu-\u0186sandaa",
+      "Fankwa-\u0190b\u0254",
+      "\u0186b\u025bs\u025b-Ahinime",
+      "\u0186ber\u025bf\u025bw-Obubuo",
+      "Mumu-\u0186p\u025bnimba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GHS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ak-gh",
+  "localeID": "ak_GH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak.js
new file mode 100644
index 0000000..1f9a7c3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ak.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AN",
+      "EW"
+    ],
+    "DAY": [
+      "Kwesida",
+      "Dwowda",
+      "Benada",
+      "Wukuda",
+      "Yawda",
+      "Fida",
+      "Memeneda"
+    ],
+    "ERANAMES": [
+      "Ansa Kristo",
+      "Kristo Ekyiri"
+    ],
+    "ERAS": [
+      "AK",
+      "KE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Sanda-\u0186p\u025bp\u0254n",
+      "Kwakwar-\u0186gyefuo",
+      "Eb\u0254w-\u0186benem",
+      "Eb\u0254bira-Oforisuo",
+      "Esusow Aketseaba-K\u0254t\u0254nimba",
+      "Obirade-Ay\u025bwohomumu",
+      "Ay\u025bwoho-Kitawonsa",
+      "Difuu-\u0186sandaa",
+      "Fankwa-\u0190b\u0254",
+      "\u0186b\u025bs\u025b-Ahinime",
+      "\u0186ber\u025bf\u025bw-Obubuo",
+      "Mumu-\u0186p\u025bnimba"
+    ],
+    "SHORTDAY": [
+      "Kwe",
+      "Dwo",
+      "Ben",
+      "Wuk",
+      "Yaw",
+      "Fia",
+      "Mem"
+    ],
+    "SHORTMONTH": [
+      "S-\u0186",
+      "K-\u0186",
+      "E-\u0186",
+      "E-O",
+      "E-K",
+      "O-A",
+      "A-K",
+      "D-\u0186",
+      "F-\u0190",
+      "\u0186-A",
+      "\u0186-O",
+      "M-\u0186"
+    ],
+    "STANDALONEMONTH": [
+      "Sanda-\u0186p\u025bp\u0254n",
+      "Kwakwar-\u0186gyefuo",
+      "Eb\u0254w-\u0186benem",
+      "Eb\u0254bira-Oforisuo",
+      "Esusow Aketseaba-K\u0254t\u0254nimba",
+      "Obirade-Ay\u025bwohomumu",
+      "Ay\u025bwoho-Kitawonsa",
+      "Difuu-\u0186sandaa",
+      "Fankwa-\u0190b\u0254",
+      "\u0186b\u025bs\u025b-Ahinime",
+      "\u0186ber\u025bf\u025bw-Obubuo",
+      "Mumu-\u0186p\u025bnimba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GHS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ak",
+  "localeID": "ak",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am-et.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am-et.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am-et.js
new file mode 100644
index 0000000..7384a08
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am-et.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1325\u12cb\u1275",
+      "\u12a8\u1230\u12d3\u1275"
+    ],
+    "DAY": [
+      "\u12a5\u1211\u12f5",
+      "\u1230\u129e",
+      "\u121b\u12ad\u1230\u129e",
+      "\u1228\u1261\u12d5",
+      "\u1210\u1219\u1235",
+      "\u12d3\u122d\u1265",
+      "\u1245\u12f3\u121c"
+    ],
+    "ERANAMES": [
+      "\u12d3\u1218\u1270 \u12d3\u1208\u121d",
+      "\u12d3\u1218\u1270 \u121d\u1215\u1228\u1275"
+    ],
+    "ERAS": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u122a\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1276\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u12a5\u1211\u12f5",
+      "\u1230\u129e",
+      "\u121b\u12ad\u1230",
+      "\u1228\u1261\u12d5",
+      "\u1210\u1219\u1235",
+      "\u12d3\u122d\u1265",
+      "\u1245\u12f3\u121c"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u122a",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1276",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "STANDALONEMONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u122a\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1276\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "am-et",
+  "localeID": "am_ET",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am.js
new file mode 100644
index 0000000..4f3fca1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_am.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1325\u12cb\u1275",
+      "\u12a8\u1230\u12d3\u1275"
+    ],
+    "DAY": [
+      "\u12a5\u1211\u12f5",
+      "\u1230\u129e",
+      "\u121b\u12ad\u1230\u129e",
+      "\u1228\u1261\u12d5",
+      "\u1210\u1219\u1235",
+      "\u12d3\u122d\u1265",
+      "\u1245\u12f3\u121c"
+    ],
+    "ERANAMES": [
+      "\u12d3\u1218\u1270 \u12d3\u1208\u121d",
+      "\u12d3\u1218\u1270 \u121d\u1215\u1228\u1275"
+    ],
+    "ERAS": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u122a\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1276\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u12a5\u1211\u12f5",
+      "\u1230\u129e",
+      "\u121b\u12ad\u1230",
+      "\u1228\u1261\u12d5",
+      "\u1210\u1219\u1235",
+      "\u12d3\u122d\u1265",
+      "\u1245\u12f3\u121c"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u122a",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1276",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "STANDALONEMONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u122a\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1276\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "am",
+  "localeID": "am",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-001.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-001.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-001.js
new file mode 100644
index 0000000..4da6ab6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-001.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-001",
+  "localeID": "ar_001",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ae.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ae.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ae.js
new file mode 100644
index 0000000..a1524dc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ae.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-ae",
+  "localeID": "ar_AE",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-bh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-bh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-bh.js
new file mode 100644
index 0000000..8b24a40
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-bh.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-bh",
+  "localeID": "ar_BH",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dj.js
new file mode 100644
index 0000000..673aa7e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dj.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Fdj",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-dj",
+  "localeID": "ar_DJ",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dz.js
new file mode 100644
index 0000000..037cc99
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-dz.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u062c\u0627\u0646\u0641\u064a",
+      "\u0641\u064a\u0641\u0631\u064a",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0641\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u062c\u0648\u0627\u0646",
+      "\u062c\u0648\u064a\u0644\u064a\u0629",
+      "\u0623\u0648\u062a",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0627\u0646\u0641\u064a",
+      "\u0641\u064a\u0641\u0631\u064a",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0641\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u062c\u0648\u0627\u0646",
+      "\u062c\u0648\u064a\u0644\u064a\u0629",
+      "\u0623\u0648\u062a",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0627\u0646\u0641\u064a",
+      "\u0641\u064a\u0641\u0631\u064a",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0641\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u062c\u0648\u0627\u0646",
+      "\u062c\u0648\u064a\u0644\u064a\u0629",
+      "\u0623\u0648\u062a",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-dz",
+  "localeID": "ar_DZ",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eg.js
new file mode 100644
index 0000000..07e7007
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-eg",
+  "localeID": "ar_EG",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[32/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be.js
new file mode 100644
index 0000000..7f557eb
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0434\u0430 \u043f\u0430\u043b\u0443\u0434\u043d\u044f",
+      "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u043b\u0443\u0434\u043d\u044f"
+    ],
+    "DAY": [
+      "\u043d\u044f\u0434\u0437\u0435\u043b\u044f",
+      "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a",
+      "\u0430\u045e\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0435\u0440\u0430\u0434\u0430",
+      "\u0447\u0430\u0446\u0432\u0435\u0440",
+      "\u043f\u044f\u0442\u043d\u0456\u0446\u0430",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u0430 \u043d.\u044d.",
+      "\u043d.\u044d."
+    ],
+    "ERAS": [
+      "\u0434\u0430 \u043d.\u044d.",
+      "\u043d.\u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f",
+      "\u043b\u044e\u0442\u0430\u0433\u0430",
+      "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430",
+      "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430",
+      "\u043c\u0430\u044f",
+      "\u0447\u044d\u0440\u0432\u0435\u043d\u044f",
+      "\u043b\u0456\u043f\u0435\u043d\u044f",
+      "\u0436\u043d\u0456\u045e\u043d\u044f",
+      "\u0432\u0435\u0440\u0430\u0441\u043d\u044f",
+      "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430",
+      "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430",
+      "\u0441\u043d\u0435\u0436\u043d\u044f"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0434",
+      "\u043f\u043d",
+      "\u0430\u045e",
+      "\u0441\u0440",
+      "\u0447\u0446",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0441\u0442\u0443",
+      "\u043b\u044e\u0442",
+      "\u0441\u0430\u043a",
+      "\u043a\u0440\u0430",
+      "\u043c\u0430\u044f",
+      "\u0447\u044d\u0440",
+      "\u043b\u0456\u043f",
+      "\u0436\u043d\u0456",
+      "\u0432\u0435\u0440",
+      "\u043a\u0430\u0441",
+      "\u043b\u0456\u0441",
+      "\u0441\u043d\u0435"
+    ],
+    "STANDALONEMONTH": [
+      "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c",
+      "\u043b\u044e\u0442\u044b",
+      "\u0441\u0430\u043a\u0430\u0432\u0456\u043a",
+      "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a",
+      "\u043c\u0430\u0439",
+      "\u0447\u044d\u0440\u0432\u0435\u043d\u044c",
+      "\u043b\u0456\u043f\u0435\u043d\u044c",
+      "\u0436\u043d\u0456\u0432\u0435\u043d\u044c",
+      "\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c",
+      "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a",
+      "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434",
+      "\u0441\u043d\u0435\u0436\u0430\u043d\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d.M.y HH.mm.ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy HH.mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "BYR",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "be",
+  "localeID": "be",
+  "pluralCat": function(n, opt_precision) {  if (n % 10 == 1 && n % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (n % 10 == 0 || n % 10 >= 5 && n % 10 <= 9 || n % 100 >= 11 && n % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem-zm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem-zm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem-zm.js
new file mode 100644
index 0000000..6881a37
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem-zm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "uluchelo",
+      "akasuba"
+    ],
+    "DAY": [
+      "Pa Mulungu",
+      "Palichimo",
+      "Palichibuli",
+      "Palichitatu",
+      "Palichine",
+      "Palichisano",
+      "Pachibelushi"
+    ],
+    "ERANAMES": [
+      "Before Yesu",
+      "After Yesu"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Epreo",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Ogasti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Pa Mulungu",
+      "Palichimo",
+      "Palichibuli",
+      "Palichitatu",
+      "Palichine",
+      "Palichisano",
+      "Pachibelushi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Epr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Oga",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Epreo",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Ogasti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "ZMW",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bem-zm",
+  "localeID": "bem_ZM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem.js
new file mode 100644
index 0000000..8a8229d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bem.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "uluchelo",
+      "akasuba"
+    ],
+    "DAY": [
+      "Pa Mulungu",
+      "Palichimo",
+      "Palichibuli",
+      "Palichitatu",
+      "Palichine",
+      "Palichisano",
+      "Pachibelushi"
+    ],
+    "ERANAMES": [
+      "Before Yesu",
+      "After Yesu"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Epreo",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Ogasti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Pa Mulungu",
+      "Palichimo",
+      "Palichibuli",
+      "Palichitatu",
+      "Palichine",
+      "Palichisano",
+      "Pachibelushi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Epr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Oga",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Epreo",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Ogasti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "ZMW",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bem",
+  "localeID": "bem",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez-tz.js
new file mode 100644
index 0000000..9e5fa35
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "pamilau",
+      "pamunyi"
+    ],
+    "DAY": [
+      "pa mulungu",
+      "pa shahuviluha",
+      "pa hivili",
+      "pa hidatu",
+      "pa hitayi",
+      "pa hihanu",
+      "pa shahulembela"
+    ],
+    "ERANAMES": [
+      "Kabla ya Mtwaa",
+      "Baada ya Mtwaa"
+    ],
+    "ERAS": [
+      "KM",
+      "BM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "pa mwedzi gwa hutala",
+      "pa mwedzi gwa wuvili",
+      "pa mwedzi gwa wudatu",
+      "pa mwedzi gwa wutai",
+      "pa mwedzi gwa wuhanu",
+      "pa mwedzi gwa sita",
+      "pa mwedzi gwa saba",
+      "pa mwedzi gwa nane",
+      "pa mwedzi gwa tisa",
+      "pa mwedzi gwa kumi",
+      "pa mwedzi gwa kumi na moja",
+      "pa mwedzi gwa kumi na mbili"
+    ],
+    "SHORTDAY": [
+      "Mul",
+      "Vil",
+      "Hiv",
+      "Hid",
+      "Hit",
+      "Hih",
+      "Lem"
+    ],
+    "SHORTMONTH": [
+      "Hut",
+      "Vil",
+      "Dat",
+      "Tai",
+      "Han",
+      "Sit",
+      "Sab",
+      "Nan",
+      "Tis",
+      "Kum",
+      "Kmj",
+      "Kmb"
+    ],
+    "STANDALONEMONTH": [
+      "pa mwedzi gwa hutala",
+      "pa mwedzi gwa wuvili",
+      "pa mwedzi gwa wudatu",
+      "pa mwedzi gwa wutai",
+      "pa mwedzi gwa wuhanu",
+      "pa mwedzi gwa sita",
+      "pa mwedzi gwa saba",
+      "pa mwedzi gwa nane",
+      "pa mwedzi gwa tisa",
+      "pa mwedzi gwa kumi",
+      "pa mwedzi gwa kumi na moja",
+      "pa mwedzi gwa kumi na mbili"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "bez-tz",
+  "localeID": "bez_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez.js
new file mode 100644
index 0000000..3788f08
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bez.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "pamilau",
+      "pamunyi"
+    ],
+    "DAY": [
+      "pa mulungu",
+      "pa shahuviluha",
+      "pa hivili",
+      "pa hidatu",
+      "pa hitayi",
+      "pa hihanu",
+      "pa shahulembela"
+    ],
+    "ERANAMES": [
+      "Kabla ya Mtwaa",
+      "Baada ya Mtwaa"
+    ],
+    "ERAS": [
+      "KM",
+      "BM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "pa mwedzi gwa hutala",
+      "pa mwedzi gwa wuvili",
+      "pa mwedzi gwa wudatu",
+      "pa mwedzi gwa wutai",
+      "pa mwedzi gwa wuhanu",
+      "pa mwedzi gwa sita",
+      "pa mwedzi gwa saba",
+      "pa mwedzi gwa nane",
+      "pa mwedzi gwa tisa",
+      "pa mwedzi gwa kumi",
+      "pa mwedzi gwa kumi na moja",
+      "pa mwedzi gwa kumi na mbili"
+    ],
+    "SHORTDAY": [
+      "Mul",
+      "Vil",
+      "Hiv",
+      "Hid",
+      "Hit",
+      "Hih",
+      "Lem"
+    ],
+    "SHORTMONTH": [
+      "Hut",
+      "Vil",
+      "Dat",
+      "Tai",
+      "Han",
+      "Sit",
+      "Sab",
+      "Nan",
+      "Tis",
+      "Kum",
+      "Kmj",
+      "Kmb"
+    ],
+    "STANDALONEMONTH": [
+      "pa mwedzi gwa hutala",
+      "pa mwedzi gwa wuvili",
+      "pa mwedzi gwa wudatu",
+      "pa mwedzi gwa wutai",
+      "pa mwedzi gwa wuhanu",
+      "pa mwedzi gwa sita",
+      "pa mwedzi gwa saba",
+      "pa mwedzi gwa nane",
+      "pa mwedzi gwa tisa",
+      "pa mwedzi gwa kumi",
+      "pa mwedzi gwa kumi na moja",
+      "pa mwedzi gwa kumi na mbili"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "bez",
+  "localeID": "bez",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg-bg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg-bg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg-bg.js
new file mode 100644
index 0000000..cd8d37d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg-bg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440.\u043e\u0431.",
+      "\u0441\u043b.\u043e\u0431."
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u043b\u044f",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u044f\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
+      "\u043f\u0435\u0442\u044a\u043a",
+      "\u0441\u044a\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u043f\u0440\u0435\u0434\u0438 \u0425\u0440\u0438\u0441\u0442\u0430",
+      "\u0441\u043b\u0435\u0434 \u0425\u0440\u0438\u0441\u0442\u0430"
+    ],
+    "ERAS": [
+      "\u043f\u0440.\u0425\u0440.",
+      "\u0441\u043b.\u0425\u0440."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0439",
+      "\u044e\u043d\u0438",
+      "\u044e\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0434",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u0439",
+      "\u044e\u043d\u0438",
+      "\u044e\u043b\u0438",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043f\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u0435\u043c.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0439",
+      "\u044e\u043d\u0438",
+      "\u044e\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d.MM.y '\u0433'. H:mm:ss",
+    "mediumDate": "d.MM.y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "d.MM.yy '\u0433'. H:mm",
+    "shortDate": "d.MM.yy '\u0433'.",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "lev",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bg-bg",
+  "localeID": "bg_BG",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg.js
new file mode 100644
index 0000000..2b62eaf
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440.\u043e\u0431.",
+      "\u0441\u043b.\u043e\u0431."
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u043b\u044f",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u044f\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
+      "\u043f\u0435\u0442\u044a\u043a",
+      "\u0441\u044a\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u043f\u0440\u0435\u0434\u0438 \u0425\u0440\u0438\u0441\u0442\u0430",
+      "\u0441\u043b\u0435\u0434 \u0425\u0440\u0438\u0441\u0442\u0430"
+    ],
+    "ERAS": [
+      "\u043f\u0440.\u0425\u0440.",
+      "\u0441\u043b.\u0425\u0440."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0439",
+      "\u044e\u043d\u0438",
+      "\u044e\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0434",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u0439",
+      "\u044e\u043d\u0438",
+      "\u044e\u043b\u0438",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043f\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u0435\u043c.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0439",
+      "\u044e\u043d\u0438",
+      "\u044e\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d.MM.y '\u0433'. H:mm:ss",
+    "mediumDate": "d.MM.y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "d.MM.yy '\u0433'. H:mm",
+    "shortDate": "d.MM.yy '\u0433'.",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "lev",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bg",
+  "localeID": "bg",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn-ml.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn-ml.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn-ml.js
new file mode 100644
index 0000000..d5d7258
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn-ml.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "kari",
+      "nt\u025bn\u025b",
+      "tarata",
+      "araba",
+      "alamisa",
+      "juma",
+      "sibiri"
+    ],
+    "ERANAMES": [
+      "jezu krisiti \u0272\u025b",
+      "jezu krisiti mink\u025b"
+    ],
+    "ERAS": [
+      "J.-C. \u0272\u025b",
+      "ni J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "zanwuye",
+      "feburuye",
+      "marisi",
+      "awirili",
+      "m\u025b",
+      "zuw\u025bn",
+      "zuluye",
+      "uti",
+      "s\u025btanburu",
+      "\u0254kut\u0254buru",
+      "nowanburu",
+      "desanburu"
+    ],
+    "SHORTDAY": [
+      "kar",
+      "nt\u025b",
+      "tar",
+      "ara",
+      "ala",
+      "jum",
+      "sib"
+    ],
+    "SHORTMONTH": [
+      "zan",
+      "feb",
+      "mar",
+      "awi",
+      "m\u025b",
+      "zuw",
+      "zul",
+      "uti",
+      "s\u025bt",
+      "\u0254ku",
+      "now",
+      "des"
+    ],
+    "STANDALONEMONTH": [
+      "zanwuye",
+      "feburuye",
+      "marisi",
+      "awirili",
+      "m\u025b",
+      "zuw\u025bn",
+      "zuluye",
+      "uti",
+      "s\u025btanburu",
+      "\u0254kut\u0254buru",
+      "nowanburu",
+      "desanburu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bm-latn-ml",
+  "localeID": "bm_Latn_ML",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn.js
new file mode 100644
index 0000000..1d2721b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "kari",
+      "nt\u025bn\u025b",
+      "tarata",
+      "araba",
+      "alamisa",
+      "juma",
+      "sibiri"
+    ],
+    "ERANAMES": [
+      "jezu krisiti \u0272\u025b",
+      "jezu krisiti mink\u025b"
+    ],
+    "ERAS": [
+      "J.-C. \u0272\u025b",
+      "ni J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "zanwuye",
+      "feburuye",
+      "marisi",
+      "awirili",
+      "m\u025b",
+      "zuw\u025bn",
+      "zuluye",
+      "uti",
+      "s\u025btanburu",
+      "\u0254kut\u0254buru",
+      "nowanburu",
+      "desanburu"
+    ],
+    "SHORTDAY": [
+      "kar",
+      "nt\u025b",
+      "tar",
+      "ara",
+      "ala",
+      "jum",
+      "sib"
+    ],
+    "SHORTMONTH": [
+      "zan",
+      "feb",
+      "mar",
+      "awi",
+      "m\u025b",
+      "zuw",
+      "zul",
+      "uti",
+      "s\u025bt",
+      "\u0254ku",
+      "now",
+      "des"
+    ],
+    "STANDALONEMONTH": [
+      "zanwuye",
+      "feburuye",
+      "marisi",
+      "awirili",
+      "m\u025b",
+      "zuw\u025bn",
+      "zuluye",
+      "uti",
+      "s\u025btanburu",
+      "\u0254kut\u0254buru",
+      "nowanburu",
+      "desanburu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bm-latn",
+  "localeID": "bm_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-ml.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-ml.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-ml.js
new file mode 100644
index 0000000..1fd1852
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm-ml.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "kari",
+      "nt\u025bn\u025b",
+      "tarata",
+      "araba",
+      "alamisa",
+      "juma",
+      "sibiri"
+    ],
+    "MONTH": [
+      "zanwuye",
+      "feburuye",
+      "marisi",
+      "awirili",
+      "m\u025b",
+      "zuw\u025bn",
+      "zuluye",
+      "uti",
+      "s\u025btanburu",
+      "\u0254kut\u0254buru",
+      "nowanburu",
+      "desanburu"
+    ],
+    "SHORTDAY": [
+      "kar",
+      "nt\u025b",
+      "tar",
+      "ara",
+      "ala",
+      "jum",
+      "sib"
+    ],
+    "SHORTMONTH": [
+      "zan",
+      "feb",
+      "mar",
+      "awi",
+      "m\u025b",
+      "zuw",
+      "zul",
+      "uti",
+      "s\u025bt",
+      "\u0254ku",
+      "now",
+      "des"
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bm-ml",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm.js
new file mode 100644
index 0000000..af07e44
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "kari",
+      "nt\u025bn\u025b",
+      "tarata",
+      "araba",
+      "alamisa",
+      "juma",
+      "sibiri"
+    ],
+    "ERANAMES": [
+      "jezu krisiti \u0272\u025b",
+      "jezu krisiti mink\u025b"
+    ],
+    "ERAS": [
+      "J.-C. \u0272\u025b",
+      "ni J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "zanwuye",
+      "feburuye",
+      "marisi",
+      "awirili",
+      "m\u025b",
+      "zuw\u025bn",
+      "zuluye",
+      "uti",
+      "s\u025btanburu",
+      "\u0254kut\u0254buru",
+      "nowanburu",
+      "desanburu"
+    ],
+    "SHORTDAY": [
+      "kar",
+      "nt\u025b",
+      "tar",
+      "ara",
+      "ala",
+      "jum",
+      "sib"
+    ],
+    "SHORTMONTH": [
+      "zan",
+      "feb",
+      "mar",
+      "awi",
+      "m\u025b",
+      "zuw",
+      "zul",
+      "uti",
+      "s\u025bt",
+      "\u0254ku",
+      "now",
+      "des"
+    ],
+    "STANDALONEMONTH": [
+      "zanwuye",
+      "feburuye",
+      "marisi",
+      "awirili",
+      "m\u025b",
+      "zuw\u025bn",
+      "zuluye",
+      "uti",
+      "s\u025btanburu",
+      "\u0254kut\u0254buru",
+      "nowanburu",
+      "desanburu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bm",
+  "localeID": "bm",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-bd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-bd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-bd.js
new file mode 100644
index 0000000..a6009d7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-bd.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
+      "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
+      "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
+      "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
+      "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
+      "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
+      "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
+    ],
+    "ERANAMES": [
+      "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac",
+      "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"
+    ],
+    "ERAS": [
+      "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac",
+      "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"
+    ],
+    "FIRSTDAYOFWEEK": 4,
+    "MONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "SHORTDAY": [
+      "\u09b0\u09ac\u09bf",
+      "\u09b8\u09cb\u09ae",
+      "\u09ae\u0999\u09cd\u0997\u09b2",
+      "\u09ac\u09c1\u09a7",
+      "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf",
+      "\u09b6\u09c1\u0995\u09cd\u09b0",
+      "\u09b6\u09a8\u09bf"
+    ],
+    "SHORTMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "STANDALONEMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u09f3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "bn-bd",
+  "localeID": "bn_BD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-in.js
new file mode 100644
index 0000000..021644d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
+      "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
+      "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
+      "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
+      "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
+      "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
+      "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
+    ],
+    "ERANAMES": [
+      "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac",
+      "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"
+    ],
+    "ERAS": [
+      "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac",
+      "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "SHORTDAY": [
+      "\u09b0\u09ac\u09bf",
+      "\u09b8\u09cb\u09ae",
+      "\u09ae\u0999\u09cd\u0997\u09b2",
+      "\u09ac\u09c1\u09a7",
+      "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf",
+      "\u09b6\u09c1\u0995\u09cd\u09b0",
+      "\u09b6\u09a8\u09bf"
+    ],
+    "SHORTMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "STANDALONEMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "bn-in",
+  "localeID": "bn_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn.js
new file mode 100644
index 0000000..866471e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
+      "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
+      "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
+      "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
+      "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
+      "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
+      "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
+    ],
+    "ERANAMES": [
+      "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac",
+      "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"
+    ],
+    "ERAS": [
+      "\u0996\u09cd\u09b0\u09bf\u09b8\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac",
+      "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"
+    ],
+    "FIRSTDAYOFWEEK": 4,
+    "MONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "SHORTDAY": [
+      "\u09b0\u09ac\u09bf",
+      "\u09b8\u09cb\u09ae",
+      "\u09ae\u0999\u09cd\u0997\u09b2",
+      "\u09ac\u09c1\u09a7",
+      "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf",
+      "\u09b6\u09c1\u0995\u09cd\u09b0",
+      "\u09b6\u09a8\u09bf"
+    ],
+    "SHORTMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "STANDALONEMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+      "\u09ae\u09be\u09b0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b8\u09cd\u099f",
+      "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+      "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+      "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u09f3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "bn",
+  "localeID": "bn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-cn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-cn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-cn.js
new file mode 100644
index 0000000..643db4d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-cn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0f66\u0f94\u0f0b\u0f51\u0fb2\u0f7c\u0f0b",
+      "\u0f55\u0fb1\u0f72\u0f0b\u0f51\u0fb2\u0f7c\u0f0b"
+    ],
+    "DAY": [
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
+    ],
+    "ERANAMES": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d"
+    ],
+    "ERAS": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTDAY": [
+      "\u0f49\u0f72\u0f0b\u0f58\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTMONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f21",
+      "\u0f5f\u0fb3\u0f0b\u0f22",
+      "\u0f5f\u0fb3\u0f0b\u0f23",
+      "\u0f5f\u0fb3\u0f0b\u0f24",
+      "\u0f5f\u0fb3\u0f0b\u0f25",
+      "\u0f5f\u0fb3\u0f0b\u0f26",
+      "\u0f5f\u0fb3\u0f0b\u0f27",
+      "\u0f5f\u0fb3\u0f0b\u0f28",
+      "\u0f5f\u0fb3\u0f0b\u0f29",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f20",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f21",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f22"
+    ],
+    "STANDALONEMONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
+    "medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss",
+    "mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bo-cn",
+  "localeID": "bo_CN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-in.js
new file mode 100644
index 0000000..4f15303
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo-in.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0f66\u0f94\u0f0b\u0f51\u0fb2\u0f7c\u0f0b",
+      "\u0f55\u0fb1\u0f72\u0f0b\u0f51\u0fb2\u0f7c\u0f0b"
+    ],
+    "DAY": [
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
+    ],
+    "ERANAMES": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d"
+    ],
+    "ERAS": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTDAY": [
+      "\u0f49\u0f72\u0f0b\u0f58\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTMONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f21",
+      "\u0f5f\u0fb3\u0f0b\u0f22",
+      "\u0f5f\u0fb3\u0f0b\u0f23",
+      "\u0f5f\u0fb3\u0f0b\u0f24",
+      "\u0f5f\u0fb3\u0f0b\u0f25",
+      "\u0f5f\u0fb3\u0f0b\u0f26",
+      "\u0f5f\u0fb3\u0f0b\u0f27",
+      "\u0f5f\u0fb3\u0f0b\u0f28",
+      "\u0f5f\u0fb3\u0f0b\u0f29",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f20",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f21",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f22"
+    ],
+    "STANDALONEMONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
+    "medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss",
+    "mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bo-in",
+  "localeID": "bo_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo.js
new file mode 100644
index 0000000..75c2a86
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0f66\u0f94\u0f0b\u0f51\u0fb2\u0f7c\u0f0b",
+      "\u0f55\u0fb1\u0f72\u0f0b\u0f51\u0fb2\u0f7c\u0f0b"
+    ],
+    "DAY": [
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
+    ],
+    "ERANAMES": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d"
+    ],
+    "ERAS": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f66\u0f94\u0f7c\u0f53\u0f0d",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTDAY": [
+      "\u0f49\u0f72\u0f0b\u0f58\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTMONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f21",
+      "\u0f5f\u0fb3\u0f0b\u0f22",
+      "\u0f5f\u0fb3\u0f0b\u0f23",
+      "\u0f5f\u0fb3\u0f0b\u0f24",
+      "\u0f5f\u0fb3\u0f0b\u0f25",
+      "\u0f5f\u0fb3\u0f0b\u0f26",
+      "\u0f5f\u0fb3\u0f0b\u0f27",
+      "\u0f5f\u0fb3\u0f0b\u0f28",
+      "\u0f5f\u0fb3\u0f0b\u0f29",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f20",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f21",
+      "\u0f5f\u0fb3\u0f0b\u0f21\u0f22"
+    ],
+    "STANDALONEMONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
+    "medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss",
+    "mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "bo",
+  "localeID": "bo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br-fr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br-fr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br-fr.js
new file mode 100644
index 0000000..2e1b346
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br-fr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "A.M.",
+      "G.M."
+    ],
+    "DAY": [
+      "Sul",
+      "Lun",
+      "Meurzh",
+      "Merc\u02bcher",
+      "Yaou",
+      "Gwener",
+      "Sadorn"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Genver",
+      "C\u02bchwevrer",
+      "Meurzh",
+      "Ebrel",
+      "Mae",
+      "Mezheven",
+      "Gouere",
+      "Eost",
+      "Gwengolo",
+      "Here",
+      "Du",
+      "Kerzu"
+    ],
+    "SHORTDAY": [
+      "Sul",
+      "Lun",
+      "Meu.",
+      "Mer.",
+      "Yaou",
+      "Gwe.",
+      "Sad."
+    ],
+    "SHORTMONTH": [
+      "Gen",
+      "C\u02bchwe",
+      "Meur",
+      "Ebr",
+      "Mae",
+      "Mezh",
+      "Goue",
+      "Eost",
+      "Gwen",
+      "Here",
+      "Du",
+      "Ker"
+    ],
+    "STANDALONEMONTH": [
+      "Genver",
+      "C\u02bchwevrer",
+      "Meurzh",
+      "Ebrel",
+      "Mae",
+      "Mezheven",
+      "Gouere",
+      "Eost",
+      "Gwengolo",
+      "Here",
+      "Du",
+      "Kerzu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "br-fr",
+  "localeID": "br_FR",
+  "pluralCat": function(n, opt_precision) {  if (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) {    return PLURAL_CATEGORY.TWO;  }  if ((n % 10 >= 3 && n % 10 <= 4 || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) {    return PLURAL_CATEGORY.FEW;  }  if (n != 0 && n % 1000000 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br.js
new file mode 100644
index 0000000..9434aaf
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_br.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "A.M.",
+      "G.M."
+    ],
+    "DAY": [
+      "Sul",
+      "Lun",
+      "Meurzh",
+      "Merc\u02bcher",
+      "Yaou",
+      "Gwener",
+      "Sadorn"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Genver",
+      "C\u02bchwevrer",
+      "Meurzh",
+      "Ebrel",
+      "Mae",
+      "Mezheven",
+      "Gouere",
+      "Eost",
+      "Gwengolo",
+      "Here",
+      "Du",
+      "Kerzu"
+    ],
+    "SHORTDAY": [
+      "Sul",
+      "Lun",
+      "Meu.",
+      "Mer.",
+      "Yaou",
+      "Gwe.",
+      "Sad."
+    ],
+    "SHORTMONTH": [
+      "Gen",
+      "C\u02bchwe",
+      "Meur",
+      "Ebr",
+      "Mae",
+      "Mezh",
+      "Goue",
+      "Eost",
+      "Gwen",
+      "Here",
+      "Du",
+      "Ker"
+    ],
+    "STANDALONEMONTH": [
+      "Genver",
+      "C\u02bchwevrer",
+      "Meurzh",
+      "Ebrel",
+      "Mae",
+      "Mezheven",
+      "Gouere",
+      "Eost",
+      "Gwengolo",
+      "Here",
+      "Du",
+      "Kerzu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "br",
+  "localeID": "br",
+  "pluralCat": function(n, opt_precision) {  if (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) {    return PLURAL_CATEGORY.TWO;  }  if ((n % 10 >= 3 && n % 10 <= 4 || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) {    return PLURAL_CATEGORY.FEW;  }  if (n != 0 && n % 1000000 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[46/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js
new file mode 100644
index 0000000..cf0fd74
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js
@@ -0,0 +1,14 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(s,q,t){'use strict';var f="BUTTON A INPUT TEXTAREA SELECT DETAILS SUMMARY".split(" "),l=function(a,c){if(-1!==c.indexOf(a[0].nodeName))return!0};q.module("ngAria",["ng"]).provider("$aria",function(){function a(a,h,p,n){return function(d,e,b){var g=b.$normalize(h);!c[g]||l(e,p)||b[g]||d.$watch(b[a],function(b){b=n?!b:!!b;e.attr(h,b)})}}var c={ariaHidden:!0,ariaChecked:!0,ariaDisabled:!0,ariaRequired:!0,ariaInvalid:!0,ariaValue:!0,tabindex:!0,bindKeypress:!0,bindRoleForClick:!0};this.config=
+function(a){c=q.extend(c,a)};this.$get=function(){return{config:function(a){return c[a]},$$watchExpr:a}}}).directive("ngShow",["$aria",function(a){return a.$$watchExpr("ngShow","aria-hidden",[],!0)}]).directive("ngHide",["$aria",function(a){return a.$$watchExpr("ngHide","aria-hidden",[],!1)}]).directive("ngValue",["$aria",function(a){return a.$$watchExpr("ngValue","aria-checked",f,!1)}]).directive("ngChecked",["$aria",function(a){return a.$$watchExpr("ngChecked","aria-checked",f,!1)}]).directive("ngRequired",
+["$aria",function(a){return a.$$watchExpr("ngRequired","aria-required",f,!1)}]).directive("ngModel",["$aria",function(a){function c(c,n,d,e){return a.config(n)&&!d.attr(c)&&(e||!l(d,f))}function m(a,c){return!c.attr("role")&&c.attr("type")===a&&"INPUT"!==c[0].nodeName}function h(a,c){var d=a.type,e=a.role;return"checkbox"===(d||e)||"menuitemcheckbox"===e?"checkbox":"radio"===(d||e)||"menuitemradio"===e?"radio":"range"===d||"progressbar"===e||"slider"===e?"range":""}return{restrict:"A",require:"ngModel",
+priority:200,compile:function(f,n){var d=h(n,f);return{pre:function(a,b,c,k){"checkbox"===d&&(k.$isEmpty=function(a){return!1===a})},post:function(e,b,g,k){function f(){return k.$modelValue}function h(a){b.attr("aria-checked",g.value==k.$viewValue)}function n(){b.attr("aria-checked",!k.$isEmpty(k.$viewValue))}var l=c("tabindex","tabindex",b,!1);switch(d){case "radio":case "checkbox":m(d,b)&&b.attr("role",d);c("aria-checked","ariaChecked",b,!1)&&e.$watch(f,"radio"===d?h:n);l&&b.attr("tabindex",0);
+break;case "range":m(d,b)&&b.attr("role","slider");if(a.config("ariaValue")){var p=!b.attr("aria-valuemin")&&(g.hasOwnProperty("min")||g.hasOwnProperty("ngMin")),q=!b.attr("aria-valuemax")&&(g.hasOwnProperty("max")||g.hasOwnProperty("ngMax")),r=!b.attr("aria-valuenow");p&&g.$observe("min",function(a){b.attr("aria-valuemin",a)});q&&g.$observe("max",function(a){b.attr("aria-valuemax",a)});r&&e.$watch(f,function(a){b.attr("aria-valuenow",a)})}l&&b.attr("tabindex",0)}!g.hasOwnProperty("ngRequired")&&
+k.$validators.required&&c("aria-required","ariaRequired",b,!1)&&g.$observe("required",function(){b.attr("aria-required",!!g.required)});c("aria-invalid","ariaInvalid",b,!0)&&e.$watch(function(){return k.$invalid},function(a){b.attr("aria-invalid",!!a)})}}}}}]).directive("ngDisabled",["$aria",function(a){return a.$$watchExpr("ngDisabled","aria-disabled",f,!1)}]).directive("ngMessages",function(){return{restrict:"A",require:"?ngMessages",link:function(a,c,f,h){c.attr("aria-live")||c.attr("aria-live",
+"assertive")}}}).directive("ngClick",["$aria","$parse",function(a,c){return{restrict:"A",compile:function(m,h){var p=c(h.ngClick,null,!0);return function(c,d,e){if(!l(d,f)&&(a.config("bindRoleForClick")&&!d.attr("role")&&d.attr("role","button"),a.config("tabindex")&&!d.attr("tabindex")&&d.attr("tabindex",0),a.config("bindKeypress")&&!e.ngKeypress))d.on("keypress",function(a){function d(){p(c,{$event:a})}var e=a.which||a.keyCode;32!==e&&13!==e||c.$apply(d)})}}}}]).directive("ngDblclick",["$aria",function(a){return function(c,
+m,h){!a.config("tabindex")||m.attr("tabindex")||l(m,f)||m.attr("tabindex",0)}}])})(window,window.angular);
+//# sourceMappingURL=angular-aria.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js.map
new file mode 100644
index 0000000..b1db15b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-aria.min.js",
+"lineCount":13,
+"mappings":"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",
+"sources":["angular-aria.js"],
+"names":["window","angular","undefined","nodeBlackList","isNodeOneOf","elem","nodeTypeArray","indexOf","nodeName","module","provider","ngAriaModule","$AriaProvider","watchExpr","attrName","ariaAttr","negate","scope","attr","ariaCamelName","$normalize","config","$watch","boolVal","ariaHidden","ariaChecked","ariaDisabled","ariaRequired","ariaInvalid","ariaValue","tabindex","bindKeypress","bindRoleForClick","this.config","newConfig","extend","$get","this.$get","key","$$watchExpr","directive","$aria","shouldAttachAttr","normalizedAttr","allowBlacklistEls","shouldAttachRole","role","getShape","type","restrict","require","priority","compile","shape","pre","ngModel","$isEmpty","ngModel.$isEmpty","value","post","ngAriaWatchModelValue","$modelValue","getRadioReaction","newVal","$viewValue","getCheckboxReaction","needsTabIndex","needsAriaValuemin","hasOwnProperty","needsAriaValuemax","needsAriaValuenow","$observe","ngAriaValueMinReaction","ngAriaValueNowReaction","$validators","required","ngA
 riaInvalidWatch","$invalid","ngAriaInvalidReaction","link","ngMessages","$parse","fn","ngClick","ngKeypress","on","event","callback","$event","keyCode","which","$apply"]
+}

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js
new file mode 100644
index 0000000..2157ef0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.js
@@ -0,0 +1,322 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngCookies
+ * @description
+ *
+ * # ngCookies
+ *
+ * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
+ *
+ *
+ * <div doc-module-components="ngCookies"></div>
+ *
+ * See {@link ngCookies.$cookies `$cookies`} for usage.
+ */
+
+
+angular.module('ngCookies', ['ng']).
+  /**
+   * @ngdoc provider
+   * @name $cookiesProvider
+   * @description
+   * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
+   * */
+   provider('$cookies', [function $CookiesProvider() {
+    /**
+     * @ngdoc property
+     * @name $cookiesProvider#defaults
+     * @description
+     *
+     * Object containing default options to pass when setting cookies.
+     *
+     * The object may have following properties:
+     *
+     * - **path** - `{string}` - The cookie will be available only for this path and its
+     *   sub-paths. By default, this is the URL that appears in your `<base>` tag.
+     * - **domain** - `{string}` - The cookie will be available only for this domain and
+     *   its sub-domains. For security reasons the user agent will not accept the cookie
+     *   if the current domain is not a sub-domain of this domain or equal to it.
+     * - **expires** - `{string|Date}` - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT"
+     *   or a Date object indicating the exact date/time this cookie will expire.
+     * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a
+     *   secured connection.
+     *
+     * Note: By default, the address that appears in your `<base>` tag will be used as the path.
+     * This is important so that cookies will be visible for all routes when html5mode is enabled.
+     *
+     **/
+    var defaults = this.defaults = {};
+
+    function calcOptions(options) {
+      return options ? angular.extend({}, defaults, options) : defaults;
+    }
+
+    /**
+     * @ngdoc service
+     * @name $cookies
+     *
+     * @description
+     * Provides read/write access to browser's cookies.
+     *
+     * <div class="alert alert-info">
+     * Up until Angular 1.3, `$cookies` exposed properties that represented the
+     * current browser cookie values. In version 1.4, this behavior has changed, and
+     * `$cookies` now provides a standard api of getters, setters etc.
+     * </div>
+     *
+     * Requires the {@link ngCookies `ngCookies`} module to be installed.
+     *
+     * @example
+     *
+     * ```js
+     * angular.module('cookiesExample', ['ngCookies'])
+     *   .controller('ExampleController', ['$cookies', function($cookies) {
+     *     // Retrieving a cookie
+     *     var favoriteCookie = $cookies.get('myFavorite');
+     *     // Setting a cookie
+     *     $cookies.put('myFavorite', 'oatmeal');
+     *   }]);
+     * ```
+     */
+    this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {
+      return {
+        /**
+         * @ngdoc method
+         * @name $cookies#get
+         *
+         * @description
+         * Returns the value of given cookie key
+         *
+         * @param {string} key Id to use for lookup.
+         * @returns {string} Raw cookie value.
+         */
+        get: function(key) {
+          return $$cookieReader()[key];
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#getObject
+         *
+         * @description
+         * Returns the deserialized value of given cookie key
+         *
+         * @param {string} key Id to use for lookup.
+         * @returns {Object} Deserialized cookie value.
+         */
+        getObject: function(key) {
+          var value = this.get(key);
+          return value ? angular.fromJson(value) : value;
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#getAll
+         *
+         * @description
+         * Returns a key value object with all the cookies
+         *
+         * @returns {Object} All cookies
+         */
+        getAll: function() {
+          return $$cookieReader();
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#put
+         *
+         * @description
+         * Sets a value for given cookie key
+         *
+         * @param {string} key Id for the `value`.
+         * @param {string} value Raw value to be stored.
+         * @param {Object=} options Options object.
+         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
+         */
+        put: function(key, value, options) {
+          $$cookieWriter(key, value, calcOptions(options));
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#putObject
+         *
+         * @description
+         * Serializes and sets a value for given cookie key
+         *
+         * @param {string} key Id for the `value`.
+         * @param {Object} value Value to be stored.
+         * @param {Object=} options Options object.
+         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
+         */
+        putObject: function(key, value, options) {
+          this.put(key, angular.toJson(value), options);
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#remove
+         *
+         * @description
+         * Remove given cookie
+         *
+         * @param {string} key Id of the key-value pair to delete.
+         * @param {Object=} options Options object.
+         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
+         */
+        remove: function(key, options) {
+          $$cookieWriter(key, undefined, calcOptions(options));
+        }
+      };
+    }];
+  }]);
+
+angular.module('ngCookies').
+/**
+ * @ngdoc service
+ * @name $cookieStore
+ * @deprecated
+ * @requires $cookies
+ *
+ * @description
+ * Provides a key-value (string-object) storage, that is backed by session cookies.
+ * Objects put or retrieved from this storage are automatically serialized or
+ * deserialized by angular's toJson/fromJson.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * <div class="alert alert-danger">
+ * **Note:** The $cookieStore service is **deprecated**.
+ * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
+ * </div>
+ *
+ * @example
+ *
+ * ```js
+ * angular.module('cookieStoreExample', ['ngCookies'])
+ *   .controller('ExampleController', ['$cookieStore', function($cookieStore) {
+ *     // Put cookie
+ *     $cookieStore.put('myFavorite','oatmeal');
+ *     // Get cookie
+ *     var favoriteCookie = $cookieStore.get('myFavorite');
+ *     // Removing a cookie
+ *     $cookieStore.remove('myFavorite');
+ *   }]);
+ * ```
+ */
+ factory('$cookieStore', ['$cookies', function($cookies) {
+
+    return {
+      /**
+       * @ngdoc method
+       * @name $cookieStore#get
+       *
+       * @description
+       * Returns the value of given cookie key
+       *
+       * @param {string} key Id to use for lookup.
+       * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.
+       */
+      get: function(key) {
+        return $cookies.getObject(key);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $cookieStore#put
+       *
+       * @description
+       * Sets a value for given cookie key
+       *
+       * @param {string} key Id for the `value`.
+       * @param {Object} value Value to be stored.
+       */
+      put: function(key, value) {
+        $cookies.putObject(key, value);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $cookieStore#remove
+       *
+       * @description
+       * Remove given cookie
+       *
+       * @param {string} key Id of the key-value pair to delete.
+       */
+      remove: function(key) {
+        $cookies.remove(key);
+      }
+    };
+
+  }]);
+
+/**
+ * @name $$cookieWriter
+ * @requires $document
+ *
+ * @description
+ * This is a private service for writing cookies
+ *
+ * @param {string} name Cookie name
+ * @param {string=} value Cookie value (if undefined, cookie will be deleted)
+ * @param {Object=} options Object with options that need to be stored for the cookie.
+ */
+function $$CookieWriter($document, $log, $browser) {
+  var cookiePath = $browser.baseHref();
+  var rawDocument = $document[0];
+
+  function buildCookieString(name, value, options) {
+    var path, expires;
+    options = options || {};
+    expires = options.expires;
+    path = angular.isDefined(options.path) ? options.path : cookiePath;
+    if (angular.isUndefined(value)) {
+      expires = 'Thu, 01 Jan 1970 00:00:00 GMT';
+      value = '';
+    }
+    if (angular.isString(expires)) {
+      expires = new Date(expires);
+    }
+
+    var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);
+    str += path ? ';path=' + path : '';
+    str += options.domain ? ';domain=' + options.domain : '';
+    str += expires ? ';expires=' + expires.toUTCString() : '';
+    str += options.secure ? ';secure' : '';
+
+    // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
+    // - 300 cookies
+    // - 20 cookies per unique domain
+    // - 4096 bytes per cookie
+    var cookieLength = str.length + 1;
+    if (cookieLength > 4096) {
+      $log.warn("Cookie '" + name +
+        "' possibly not set or overflowed because it was too large (" +
+        cookieLength + " > 4096 bytes)!");
+    }
+
+    return str;
+  }
+
+  return function(name, value, options) {
+    rawDocument.cookie = buildCookieString(name, value, options);
+  };
+}
+
+$$CookieWriter.$inject = ['$document', '$log', '$browser'];
+
+angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {
+  this.$get = $$CookieWriter;
+});
+
+
+})(window, window.angular);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js
new file mode 100644
index 0000000..d0f126a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js
@@ -0,0 +1,9 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(p,c,n){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096<f&&a.warn("Cookie '"+b+"' possibly not set or overflowed because it was too large ("+
+f+" > 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,n,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore",
+["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular);
+//# sourceMappingURL=angular-cookies.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js.map
new file mode 100644
index 0000000..555b510
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-cookies.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-cookies.min.js",
+"lineCount":8,
+"mappings":"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",
+"sources":["angular-cookies.js"],
+"names":["window","angular","undefined","$$CookieWriter","$document","$log","$browser","cookiePath","baseHref","rawDocument","name","value","options","path","expires","isDefined","isUndefined","isString","Date","str","encodeURIComponent","domain","toUTCString","secure","cookieLength","length","warn","cookie","module","provider","$CookiesProvider","defaults","$get","$$cookieReader","$$cookieWriter","get","key","getObject","fromJson","getAll","put","extend","putObject","toJson","remove","factory","$cookies","$inject","$$CookieWriterProvider"]
+}

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-csp.css
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-csp.css b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-csp.css
new file mode 100644
index 0000000..f3cd926
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-csp.css
@@ -0,0 +1,21 @@
+/* Include this file in your html if you are using the CSP mode. */
+
+@charset "UTF-8";
+
+[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
+.ng-cloak, .x-ng-cloak,
+.ng-hide:not(.ng-hide-animate) {
+  display: none !important;
+}
+
+ng\:form {
+  display: block;
+}
+
+.ng-animate-shim {
+  visibility:hidden;
+}
+
+.ng-anchor {
+  position:absolute;
+}

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js
new file mode 100644
index 0000000..77948fd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.js
@@ -0,0 +1,484 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+
+(function() {'use strict';
+    function isFunction(value) {return typeof value === 'function';};
+
+/* global: toDebugString: true */
+
+function serializeObject(obj) {
+  var seen = [];
+
+  return JSON.stringify(obj, function(key, val) {
+    val = toJsonReplacer(key, val);
+    if (isObject(val)) {
+
+      if (seen.indexOf(val) >= 0) return '...';
+
+      seen.push(val);
+    }
+    return val;
+  });
+}
+
+function toDebugString(obj) {
+  if (typeof obj === 'function') {
+    return obj.toString().replace(/ \{[\s\S]*$/, '');
+  } else if (isUndefined(obj)) {
+    return 'undefined';
+  } else if (typeof obj !== 'string') {
+    return serializeObject(obj);
+  }
+  return obj;
+}
+
+/**
+ * @description
+ *
+ * This object provides a utility for producing rich Error messages within
+ * Angular. It can be called as follows:
+ *
+ * var exampleMinErr = minErr('example');
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
+ *
+ * The above creates an instance of minErr in the example namespace. The
+ * resulting error will have a namespaced error code of example.one.  The
+ * resulting error will replace {0} with the value of foo, and {1} with the
+ * value of bar. The object is not restricted in the number of arguments it can
+ * take.
+ *
+ * If fewer arguments are specified than necessary for interpolation, the extra
+ * interpolation markers will be preserved in the final string.
+ *
+ * Since data will be parsed statically during a build step, some restrictions
+ * are applied with respect to how minErr instances are created and called.
+ * Instances should have names of the form namespaceMinErr for a minErr created
+ * using minErr('namespace') . Error codes, namespaces and template strings
+ * should all be static strings, not variables or general expressions.
+ *
+ * @param {string} module The namespace to use for the new minErr instance.
+ * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
+ *   error from returned function, for cases when a particular type of error is useful.
+ * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
+ */
+
+function minErr(module, ErrorConstructor) {
+  ErrorConstructor = ErrorConstructor || Error;
+  return function() {
+    var SKIP_INDEXES = 2;
+
+    var templateArgs = arguments,
+      code = templateArgs[0],
+      message = '[' + (module ? module + ':' : '') + code + '] ',
+      template = templateArgs[1],
+      paramPrefix, i;
+
+    message += template.replace(/\{\d+\}/g, function(match) {
+      var index = +match.slice(1, -1),
+        shiftedIndex = index + SKIP_INDEXES;
+
+      if (shiftedIndex < templateArgs.length) {
+        return toDebugString(templateArgs[shiftedIndex]);
+      }
+
+      return match;
+    });
+
+    message += '\nhttp://errors.angularjs.org/1.5.0/' +
+      (module ? module + '/' : '') + code;
+
+    for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
+      message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +
+        encodeURIComponent(toDebugString(templateArgs[i]));
+    }
+
+    return new ErrorConstructor(message);
+  };
+}
+
+/**
+ * @ngdoc type
+ * @name angular.Module
+ * @module ng
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+  var $injectorMinErr = minErr('$injector');
+  var ngMinErr = minErr('ng');
+
+  function ensure(obj, name, factory) {
+    return obj[name] || (obj[name] = factory());
+  }
+
+  var angular = ensure(window, 'angular', Object);
+
+  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
+  angular.$$minErr = angular.$$minErr || minErr;
+
+  return ensure(angular, 'module', function() {
+    /** @type {Object.<string, angular.Module>} */
+    var modules = {};
+
+    /**
+     * @ngdoc function
+     * @name angular.module
+     * @module ng
+     * @description
+     *
+     * The `angular.module` is a global place for creating, registering and retrieving Angular
+     * modules.
+     * All modules (angular core or 3rd party) that should be available to an application must be
+     * registered using this mechanism.
+     *
+     * Passing one argument retrieves an existing {@link angular.Module},
+     * whereas passing more than one argument creates a new {@link angular.Module}
+     *
+     *
+     * # Module
+     *
+     * A module is a collection of services, directives, controllers, filters, and configuration information.
+     * `angular.module` is used to configure the {@link auto.$injector $injector}.
+     *
+     * ```js
+     * // Create a new module
+     * var myModule = angular.module('myModule', []);
+     *
+     * // register a new service
+     * myModule.value('appName', 'MyCoolApp');
+     *
+     * // configure existing services inside initialization blocks.
+     * myModule.config(['$locationProvider', function($locationProvider) {
+     *   // Configure existing providers
+     *   $locationProvider.hashPrefix('!');
+     * }]);
+     * ```
+     *
+     * Then you can create an injector and load your modules like this:
+     *
+     * ```js
+     * var injector = angular.injector(['ng', 'myModule'])
+     * ```
+     *
+     * However it's more likely that you'll just use
+     * {@link ng.directive:ngApp ngApp} or
+     * {@link angular.bootstrap} to simplify this process for you.
+     *
+     * @param {!string} name The name of the module to create or retrieve.
+     * @param {!Array.<string>=} requires If specified then new module is being created. If
+     *        unspecified then the module is being retrieved for further configuration.
+     * @param {Function=} configFn Optional configuration function for the module. Same as
+     *        {@link angular.Module#config Module#config()}.
+     * @returns {angular.Module} new module with the {@link angular.Module} api.
+     */
+    return function module(name, requires, configFn) {
+      var assertNotHasOwnProperty = function(name, context) {
+        if (name === 'hasOwnProperty') {
+          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
+        }
+      };
+
+      assertNotHasOwnProperty(name, 'module');
+      if (requires && modules.hasOwnProperty(name)) {
+        modules[name] = null;
+      }
+      return ensure(modules, name, function() {
+        if (!requires) {
+          throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
+             "the module name or forgot to load it. If registering a module ensure that you " +
+             "specify the dependencies as the second argument.", name);
+        }
+
+        /** @type {!Array.<Array.<*>>} */
+        var invokeQueue = [];
+
+        /** @type {!Array.<Function>} */
+        var configBlocks = [];
+
+        /** @type {!Array.<Function>} */
+        var runBlocks = [];
+
+        var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
+
+        /** @type {angular.Module} */
+        var moduleInstance = {
+          // Private state
+          _invokeQueue: invokeQueue,
+          _configBlocks: configBlocks,
+          _runBlocks: runBlocks,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#requires
+           * @module ng
+           *
+           * @description
+           * Holds the list of modules which the injector will load before the current module is
+           * loaded.
+           */
+          requires: requires,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#name
+           * @module ng
+           *
+           * @description
+           * Name of the module.
+           */
+          name: name,
+
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#provider
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerType Construction function for creating new instance of the
+           *                                service.
+           * @description
+           * See {@link auto.$provide#provider $provide.provider()}.
+           */
+          provider: invokeLaterAndSetModuleName('$provide', 'provider'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#factory
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerFunction Function for creating new instance of the service.
+           * @description
+           * See {@link auto.$provide#factory $provide.factory()}.
+           */
+          factory: invokeLaterAndSetModuleName('$provide', 'factory'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#service
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} constructor A constructor function that will be instantiated.
+           * @description
+           * See {@link auto.$provide#service $provide.service()}.
+           */
+          service: invokeLaterAndSetModuleName('$provide', 'service'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#value
+           * @module ng
+           * @param {string} name service name
+           * @param {*} object Service instance object.
+           * @description
+           * See {@link auto.$provide#value $provide.value()}.
+           */
+          value: invokeLater('$provide', 'value'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#constant
+           * @module ng
+           * @param {string} name constant name
+           * @param {*} object Constant value.
+           * @description
+           * Because the constants are fixed, they get applied before other provide methods.
+           * See {@link auto.$provide#constant $provide.constant()}.
+           */
+          constant: invokeLater('$provide', 'constant', 'unshift'),
+
+           /**
+           * @ngdoc method
+           * @name angular.Module#decorator
+           * @module ng
+           * @param {string} The name of the service to decorate.
+           * @param {Function} This function will be invoked when the service needs to be
+           *                                    instantiated and should return the decorated service instance.
+           * @description
+           * See {@link auto.$provide#decorator $provide.decorator()}.
+           */
+          decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#animation
+           * @module ng
+           * @param {string} name animation name
+           * @param {Function} animationFactory Factory function for creating new instance of an
+           *                                    animation.
+           * @description
+           *
+           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
+           *
+           *
+           * Defines an animation hook that can be later used with
+           * {@link $animate $animate} service and directives that use this service.
+           *
+           * ```js
+           * module.animation('.animation-name', function($inject1, $inject2) {
+           *   return {
+           *     eventName : function(element, done) {
+           *       //code to run the animation
+           *       //once complete, then run done()
+           *       return function cancellationFunction(element) {
+           *         //code to cancel the animation
+           *       }
+           *     }
+           *   }
+           * })
+           * ```
+           *
+           * See {@link ng.$animateProvider#register $animateProvider.register()} and
+           * {@link ngAnimate ngAnimate module} for more information.
+           */
+          animation: invokeLaterAndSetModuleName('$animateProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#filter
+           * @module ng
+           * @param {string} name Filter name - this must be a valid angular expression identifier
+           * @param {Function} filterFactory Factory function for creating new instance of filter.
+           * @description
+           * See {@link ng.$filterProvider#register $filterProvider.register()}.
+           *
+           * <div class="alert alert-warning">
+           * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+           * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+           * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+           * (`myapp_subsection_filterx`).
+           * </div>
+           */
+          filter: invokeLaterAndSetModuleName('$filterProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#controller
+           * @module ng
+           * @param {string|Object} name Controller name, or an object map of controllers where the
+           *    keys are the names and the values are the constructors.
+           * @param {Function} constructor Controller constructor function.
+           * @description
+           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+           */
+          controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#directive
+           * @module ng
+           * @param {string|Object} name Directive name, or an object map of directives where the
+           *    keys are the names and the values are the factories.
+           * @param {Function} directiveFactory Factory function for creating new instance of
+           * directives.
+           * @description
+           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
+           */
+          directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#component
+           * @module ng
+           * @param {string} name Name of the component in camel-case (i.e. myComp which will match as my-comp)
+           * @param {Object} options Component definition object (a simplified
+           *    {@link ng.$compile#directive-definition-object directive definition object})
+           *
+           * @description
+           * See {@link ng.$compileProvider#component $compileProvider.component()}.
+           */
+          component: invokeLaterAndSetModuleName('$compileProvider', 'component'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#config
+           * @module ng
+           * @param {Function} configFn Execute this function on module load. Useful for service
+           *    configuration.
+           * @description
+           * Use this method to register work which needs to be performed on module loading.
+           * For more about how to configure services, see
+           * {@link providers#provider-recipe Provider Recipe}.
+           */
+          config: config,
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#run
+           * @module ng
+           * @param {Function} initializationFn Execute this function after injector creation.
+           *    Useful for application initialization.
+           * @description
+           * Use this method to register work which should be performed when the injector is done
+           * loading all modules.
+           */
+          run: function(block) {
+            runBlocks.push(block);
+            return this;
+          }
+        };
+
+        if (configFn) {
+          config(configFn);
+        }
+
+        return moduleInstance;
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @param {String=} insertMethod
+         * @returns {angular.Module}
+         */
+        function invokeLater(provider, method, insertMethod, queue) {
+          if (!queue) queue = invokeQueue;
+          return function() {
+            queue[insertMethod || 'push']([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @returns {angular.Module}
+         */
+        function invokeLaterAndSetModuleName(provider, method) {
+          return function(recipeName, factoryFunction) {
+            if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
+            invokeQueue.push([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+      });
+    };
+  });
+
+}
+
+setupModuleLoader(window);
+})(window);
+
+/**
+ * Closure compiler type information
+ *
+ * @typedef { {
+ *   requires: !Array.<string>,
+ *   invokeQueue: !Array.<Array.<*>>,
+ *
+ *   service: function(string, Function):angular.Module,
+ *   factory: function(string, Function):angular.Module,
+ *   value: function(string, *):angular.Module,
+ *
+ *   filter: function(string, Function):angular.Module,
+ *
+ *   init: function(Function):angular.Module
+ * } }
+ */
+angular.Module;
+

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js
new file mode 100644
index 0000000..316ee26
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js
@@ -0,0 +1,10 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(){'use strict';function d(b){return function(){var a=arguments[0],e;e="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.5.0/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){e=e+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,c;c=arguments[a];c="function"==typeof c?c.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof c?"undefined":"string"!=typeof c?JSON.stringify(c):c;e+=d(c)}return Error(e)}}(function(b){function a(c,a,b){return c[a]||(c[a]=b())}var e=d("$injector"),n=d("ng");
+b=a(b,"angular",Object);b.$$minErr=b.$$minErr||d;return a(b,"module",function(){var c={};return function(b,d,h){if("hasOwnProperty"===b)throw n("badname","module");d&&c.hasOwnProperty(b)&&(c[b]=null);return a(c,b,function(){function c(a,b,d,e){e||(e=f);return function(){e[d||"push"]([a,b,arguments]);return g}}function a(c,e){return function(a,d){d&&"function"===typeof d&&(d.$$moduleName=b);f.push([c,e,arguments]);return g}}if(!d)throw e("nomod",b);var f=[],k=[],l=[],m=c("$injector","invoke","push",
+k),g={_invokeQueue:f,_configBlocks:k,_runBlocks:l,requires:d,name:b,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:c("$provide","value"),constant:c("$provide","constant","unshift"),decorator:a("$provide","decorator"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),component:a("$compileProvider","component"),config:m,run:function(a){l.push(a);
+return this}};h&&m(h);return g})}})})(window)})(window);
+//# sourceMappingURL=angular-loader.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js.map
new file mode 100644
index 0000000..67ebb8b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-loader.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-loader.min.js",
+"lineCount":9,
+"mappings":"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",
+"sources":["angular-loader.js"],
+"names":["minErr","setupModuleLoader","window","ensure","obj","name","factory","$injectorMinErr","ngMinErr","angular","Object","$$minErr","modules","module","requires","configFn","context","hasOwnProperty","invokeLater","provider","method","insertMethod","queue","invokeQueue","arguments","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","push","configBlocks","runBlocks","config","_invokeQueue","_configBlocks","_runBlocks","service","value","constant","decorator","animation","filter","controller","directive","component","run","block"]
+}


[47/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js.map
new file mode 100644
index 0000000..1d4f7a6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-animate.min.js",
+"lineCount":55,
+"mappings":"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",
+"sources":["angular-animate.js"],
+"names":["window","angular","undefined","assertArg","arg","name","reason","ngMinErr","mergeClasses","a","b","isArray","join","packageStyles","options","styles","to","from","pendClasses","classes","fix","isPrefix","className","isString","length","split","forEach","klass","i","stripCommentsFromElement","element","jqLite","ELEMENT_NODE","nodeType","extractElementNode","elm","$$addClass","$$jqLite","addClass","$$removeClass","removeClass","applyAnimationClassesFactory","prepareAnimationOptions","$$prepared","domOperation","noop","options.domOperation","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","css","mergeAnimationDetails","oldAnimation","newAnimation","target","newOptions","toAdd","toRemove","resolveElementClasses","attr","preparationClasses","concatWithSpace","realDomOperation","extend","existing","splitClassesToLookup","obj","flags","value","key","ADD_CLASS","REMOVE_CLASS","val","prop","allow","getDomNode","applyGeneratedPreparati
 onClasses","event","EVENT_CLASS_PREFIX","ADD_CLASS_SUFFIX","REMOVE_CLASS_SUFFIX","blockTransitions","node","duration","applyInlineStyle","TRANSITION_DELAY_PROP","blockKeyframeAnimations","applyBlock","ANIMATION_PROP","ANIMATION_PLAYSTATE_KEY","styleTuple","style","computeCssStyles","$window","properties","Object","create","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","c","charAt","parseMaxTime","str","maxValue","values","substring","parseFloat","Math","max","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","TRANSITION_PROP","DURATION_KEY","createLocalCacheLookup","cache","flush","count","entry","total","get","put","registerRestorableStyles","backup","isDefined","getPropertyValue","copy","isObject","isUndefined","isFunction","isElement","TRANSITIONEND_EVENT","ANIMATIONEND_EVENT","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","ANIMATION_DELAY_PROP","DELAY_KEY","ANIMATION_DURATION_PROP","TRANSITION_DURAT
 ION_PROP","$$minErr","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","PROPERTY_KEY","animationDuration","animationDelay","animationIterationCount","ANIMATION_ITERATION_COUNT_KEY","DETECT_STAGGER_CSS_PROPERTIES","module","directive","ngAnimateSwapDirective","$animate","$rootScope","restrict","transclude","terminal","priority","link","scope","$element","attrs","ctrl","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","leave","$destroy","$new","enter","$$AnimateChildrenDirective","$interpolate","setData","data","NG_ANIMATE_CHILDREN_DATA","ngAnimateChildren","$observe","factory","$$rAFSchedulerFactory","$$rAF","scheduler","tasks","queue","concat","nextTick","items","shift","cancelFn","waitUntilQuiet","scheduler.waitUntilQuiet","fn","provider","$$AnimateQueueProvider","$animateProvider","makeTruthyCssClassMap","classString","keys","ONE_SPACE","map","hasMatchingClasses","newClassString","currentClassString","currentClassM
 ap","some","isAllowed","ruleType","currentAnimation","previousAnimation","rules","hasAnimationClasses","animation","and","skip","cancel","push","structural","RUNNING_STATE","state","nA","nR","cA","cR","$get","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$forceReflow","postDigestTaskFactory","postDigestCalled","$$postDigest","findCallbacks","parent","targetNode","targetParentNode","matches","entries","callbackRegistry","contains","call","callback","queueAnimation","initialOptions","notifyProgress","runner","phase","runInNextPostDigestOrNow","callbacks","progress","close","reject","activeClasses","applyAnimationClasses","complete","isAnimatableClassName","isStructural","indexOf","skipAnimations","animationsEnabled","hidden","disabledElementsLookup","existingAnimation","activeAnimationsLookup","hasExistingAnimation","PRE_DIGEST_STATE","areAnimationsAllowed","closeChildAnimations","skipAnimationFlag","cancelAnimationFlag","end","joinAnimatio
 nFlag","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationDetails","animationCancelled","realRunner","done","status","setHost","children","querySelectorAll","child","parseInt","getAttribute","NG_ANIMATE_ATTR_NAME","remove","removeAttribute","isMatchingElement","nodeOrElmA","nodeOrElmB","parentElement","bodyElement","body","bodyElementDetected","nodeName","rootElementDetected","parentAnimationDetected","animateChildren","elementDisabled","parentHost","NG_ANIMATE_PIN_DATA","parentNode","details","parentElementDisabled","setAttribute","newValue","oldValue","deregisterWatch","$watch","totalPendingRequests","isEmpty","classNameFilter","test","Node","prototype","compareDocumentPosition","on","container","off","filterFromRegistry","list","matchContainer","matchCallback","containerNode","filter","arguments","pin","enabled","bool","argCount","hasElement","recordExists","$$AnimationProvider","getRunner","RUNNER_STORAGE_KEY","drivers","$injector","$
 $rAFScheduler","sortAnimations","animations","processNode","processed","elementNode","domNode","lookup","parentEntry","tree","flatten","result","remainingLevelEntries","nextLevelEntries","row","childEntry","animationQueue","getAnchorNodes","hasAttribute","NG_ANIMATE_REF_ATTR","SELECTOR","anchors","groupAnimations","preparedAnimations","refLookup","index","enterOrMove","anchorNodes","direction","anchor","animationID","usedIndicesLookup","anchorGroups","operations","fromAnimation","toAnimation","lookupKey","toString","group","beforeStart","cssClassesIntersection","indexKey","aa","j","invokeFirstDriver","driverName","has","driver","updateAnimationRunners","newRunner","handleDestroyedElement","rejected","removeData","tempClasses","NG_ANIMATE_CLASSNAME","prepareClassName","PREPARE_CLASS_SUFFIX","groupedAnimations","toBeSortedAnimations","animationEntry","triggerAnimationStart","startAnimationFn","closeFn","targetElement","operation","start","animationRunner","$AnimateCssProvider","gcsLoo
 kup","gcsStaggerLookup","$timeout","$sniffer","$$animateQueue","gcsHashFn","extraClasses","parentCounter","computeCachedCssStaggerStyles","cacheKey","stagger","staggerClassName","rafWaitQueue","pageWidth","computeTimings","timings","aD","tD","maxDelay","maxDuration","init","endFn","animationClosed","animationCompleted","animationPaused","$$skipPreparationClasses","temporaryStyles","restoreStyles","setProperty","removeProperty","onDone","events","onAnimationProgress","animationTimerData","ANIMATE_TIMER_KEY","timer","applyBlocking","blockTransition","blockKeyframeAnimation","closeAndReturnNoopAnimator","$$willAnimate","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","recalculateTimingStyles","fullClassName","relativeDelay","hasTransitions","hasAnimations","applyAnimationDelay","delay","delayStyle","ONE_SECOND","maxDurationTime","easing","easeProp","easeVal","TIMING_KE
 Y","timerTime","CLOSING_TIME_BUFFER","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","cleanupStyles","playPause","playAnimation","arr","splice","maxStagger","itemIndex","floor","runnerHost","resume","runnerHost.resume","pause","runnerHost.pause","transitions","method","structuralClassName","addRemoveClassName","applyClassesEarly","trim","ACTIVE_CLASS_SUFFIX","hasToStyles","keyframeStyle","staggerVal","transitionStyle","durationStyle","staggerIndex","isFirst","skipBlocking","SAFE_FAST_FORWARD_DURATION_VALUE","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","$$AnimateCssDriverProvider","$$animationProvider","$animateCss","filterCssClasses","replace","getUniqueValues","prepareAnchoredAnimation","outAnchor","inAnchor","calculateAnchorStyles","coords","getBoundingClientRect","bodyNode","scrollTop","scrollLeft","prepareInAnimation","endingClasses","startingClasses","animator","clone","NG_
 ANIMATE_SHIM_CLASS_NAME","cloneNode","NG_ANIMATE_ANCHOR_CLASS_NAME","rootBodyElement","append","animatorIn","animatorOut","prepareOutAnimation","NG_OUT_ANCHOR_CLASS_NAME","startingAnimator","prepareFromToAnchorAnimation","prepareRegularAnimation","anchorAnimations","outElement","inElement","animationRunners","all","rootNode","initDriverFn","$$AnimateJsProvider","lookupAnimations","flagMap","animationFactory","$$registeredAnimations","applyOptions","executeAnimationFn","args","classesToAdd","classesToRemove","apply","groupEventedAnimations","fnName","ani","endProgressCb","resolved","onAnimationComplete","packageAnimations","startAnimation","runners","animateFn","before","after","afterFn","beforeFn","toUpperCase","substr","onComplete","success","closeActiveAnimations","chain","cancelled","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory"]
+}

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.js
new file mode 100644
index 0000000..99f5cc4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-aria.js
@@ -0,0 +1,398 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngAria
+ * @description
+ *
+ * The `ngAria` module provides support for common
+ * [<abbr title="Accessible Rich Internet Applications">ARIA</abbr>](http://www.w3.org/TR/wai-aria/)
+ * attributes that convey state or semantic information about the application for users
+ * of assistive technologies, such as screen readers.
+ *
+ * <div doc-module-components="ngAria"></div>
+ *
+ * ## Usage
+ *
+ * For ngAria to do its magic, simply include the module `ngAria` as a dependency. The following
+ * directives are supported:
+ * `ngModel`, `ngChecked`, `ngRequired`, `ngValue`, `ngDisabled`, `ngShow`, `ngHide`, `ngClick`,
+ * `ngDblClick`, and `ngMessages`.
+ *
+ * Below is a more detailed breakdown of the attributes handled by ngAria:
+ *
+ * | Directive                                   | Supported Attributes                                                                   |
+ * |---------------------------------------------|----------------------------------------------------------------------------------------|
+ * | {@link ng.directive:ngModel ngModel}        | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required, input roles |
+ * | {@link ng.directive:ngDisabled ngDisabled}  | aria-disabled                                                                          |
+ * | {@link ng.directive:ngRequired ngRequired}  | aria-required                                                                          |
+ * | {@link ng.directive:ngChecked ngChecked}    | aria-checked                                                                           |
+ * | {@link ng.directive:ngValue ngValue}        | aria-checked                                                                           |
+ * | {@link ng.directive:ngShow ngShow}          | aria-hidden                                                                            |
+ * | {@link ng.directive:ngHide ngHide}          | aria-hidden                                                                            |
+ * | {@link ng.directive:ngDblclick ngDblclick}  | tabindex                                                                               |
+ * | {@link module:ngMessages ngMessages}        | aria-live                                                                              |
+ * | {@link ng.directive:ngClick ngClick}        | tabindex, keypress event, button role                                                  |
+ *
+ * Find out more information about each directive by reading the
+ * {@link guide/accessibility ngAria Developer Guide}.
+ *
+ * ##Example
+ * Using ngDisabled with ngAria:
+ * ```html
+ * <md-checkbox ng-disabled="disabled">
+ * ```
+ * Becomes:
+ * ```html
+ * <md-checkbox ng-disabled="disabled" aria-disabled="true">
+ * ```
+ *
+ * ##Disabling Attributes
+ * It's possible to disable individual attributes added by ngAria with the
+ * {@link ngAria.$ariaProvider#config config} method. For more details, see the
+ * {@link guide/accessibility Developer Guide}.
+ */
+ /* global -ngAriaModule */
+var ngAriaModule = angular.module('ngAria', ['ng']).
+                        provider('$aria', $AriaProvider);
+
+/**
+* Internal Utilities
+*/
+var nodeBlackList = ['BUTTON', 'A', 'INPUT', 'TEXTAREA', 'SELECT', 'DETAILS', 'SUMMARY'];
+
+var isNodeOneOf = function(elem, nodeTypeArray) {
+  if (nodeTypeArray.indexOf(elem[0].nodeName) !== -1) {
+    return true;
+  }
+};
+/**
+ * @ngdoc provider
+ * @name $ariaProvider
+ *
+ * @description
+ *
+ * Used for configuring the ARIA attributes injected and managed by ngAria.
+ *
+ * ```js
+ * angular.module('myApp', ['ngAria'], function config($ariaProvider) {
+ *   $ariaProvider.config({
+ *     ariaValue: true,
+ *     tabindex: false
+ *   });
+ * });
+ *```
+ *
+ * ## Dependencies
+ * Requires the {@link ngAria} module to be installed.
+ *
+ */
+function $AriaProvider() {
+  var config = {
+    ariaHidden: true,
+    ariaChecked: true,
+    ariaDisabled: true,
+    ariaRequired: true,
+    ariaInvalid: true,
+    ariaValue: true,
+    tabindex: true,
+    bindKeypress: true,
+    bindRoleForClick: true
+  };
+
+  /**
+   * @ngdoc method
+   * @name $ariaProvider#config
+   *
+   * @param {object} config object to enable/disable specific ARIA attributes
+   *
+   *  - **ariaHidden** \u2013 `{boolean}` \u2013 Enables/disables aria-hidden tags
+   *  - **ariaChecked** \u2013 `{boolean}` \u2013 Enables/disables aria-checked tags
+   *  - **ariaDisabled** \u2013 `{boolean}` \u2013 Enables/disables aria-disabled tags
+   *  - **ariaRequired** \u2013 `{boolean}` \u2013 Enables/disables aria-required tags
+   *  - **ariaInvalid** \u2013 `{boolean}` \u2013 Enables/disables aria-invalid tags
+   *  - **ariaValue** \u2013 `{boolean}` \u2013 Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags
+   *  - **tabindex** \u2013 `{boolean}` \u2013 Enables/disables tabindex tags
+   *  - **bindKeypress** \u2013 `{boolean}` \u2013 Enables/disables keypress event binding on `div` and
+   *    `li` elements with ng-click
+   *  - **bindRoleForClick** \u2013 `{boolean}` \u2013 Adds role=button to non-interactive elements like `div`
+   *    using ng-click, making them more accessible to users of assistive technologies
+   *
+   * @description
+   * Enables/disables various ARIA attributes
+   */
+  this.config = function(newConfig) {
+    config = angular.extend(config, newConfig);
+  };
+
+  function watchExpr(attrName, ariaAttr, nodeBlackList, negate) {
+    return function(scope, elem, attr) {
+      var ariaCamelName = attr.$normalize(ariaAttr);
+      if (config[ariaCamelName] && !isNodeOneOf(elem, nodeBlackList) && !attr[ariaCamelName]) {
+        scope.$watch(attr[attrName], function(boolVal) {
+          // ensure boolean value
+          boolVal = negate ? !boolVal : !!boolVal;
+          elem.attr(ariaAttr, boolVal);
+        });
+      }
+    };
+  }
+  /**
+   * @ngdoc service
+   * @name $aria
+   *
+   * @description
+   * @priority 200
+   *
+   * The $aria service contains helper methods for applying common
+   * [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives.
+   *
+   * ngAria injects common accessibility attributes that tell assistive technologies when HTML
+   * elements are enabled, selected, hidden, and more. To see how this is performed with ngAria,
+   * let's review a code snippet from ngAria itself:
+   *
+   *```js
+   * ngAriaModule.directive('ngDisabled', ['$aria', function($aria) {
+   *   return $aria.$$watchExpr('ngDisabled', 'aria-disabled', nodeBlackList, false);
+   * }])
+   *```
+   * Shown above, the ngAria module creates a directive with the same signature as the
+   * traditional `ng-disabled` directive. But this ngAria version is dedicated to
+   * solely managing accessibility attributes on custom elements. The internal `$aria` service is
+   * used to watch the boolean attribute `ngDisabled`. If it has not been explicitly set by the
+   * developer, `aria-disabled` is injected as an attribute with its value synchronized to the
+   * value in `ngDisabled`.
+   *
+   * Because ngAria hooks into the `ng-disabled` directive, developers do not have to do
+   * anything to enable this feature. The `aria-disabled` attribute is automatically managed
+   * simply as a silent side-effect of using `ng-disabled` with the ngAria module.
+   *
+   * The full list of directives that interface with ngAria:
+   * * **ngModel**
+   * * **ngChecked**
+   * * **ngRequired**
+   * * **ngDisabled**
+   * * **ngValue**
+   * * **ngShow**
+   * * **ngHide**
+   * * **ngClick**
+   * * **ngDblclick**
+   * * **ngMessages**
+   *
+   * Read the {@link guide/accessibility ngAria Developer Guide} for a thorough explanation of each
+   * directive.
+   *
+   *
+   * ## Dependencies
+   * Requires the {@link ngAria} module to be installed.
+   */
+  this.$get = function() {
+    return {
+      config: function(key) {
+        return config[key];
+      },
+      $$watchExpr: watchExpr
+    };
+  };
+}
+
+
+ngAriaModule.directive('ngShow', ['$aria', function($aria) {
+  return $aria.$$watchExpr('ngShow', 'aria-hidden', [], true);
+}])
+.directive('ngHide', ['$aria', function($aria) {
+  return $aria.$$watchExpr('ngHide', 'aria-hidden', [], false);
+}])
+.directive('ngValue', ['$aria', function($aria) {
+  return $aria.$$watchExpr('ngValue', 'aria-checked', nodeBlackList, false);
+}])
+.directive('ngChecked', ['$aria', function($aria) {
+  return $aria.$$watchExpr('ngChecked', 'aria-checked', nodeBlackList, false);
+}])
+.directive('ngRequired', ['$aria', function($aria) {
+  return $aria.$$watchExpr('ngRequired', 'aria-required', nodeBlackList, false);
+}])
+.directive('ngModel', ['$aria', function($aria) {
+
+  function shouldAttachAttr(attr, normalizedAttr, elem, allowBlacklistEls) {
+    return $aria.config(normalizedAttr) && !elem.attr(attr) && (allowBlacklistEls || !isNodeOneOf(elem, nodeBlackList));
+  }
+
+  function shouldAttachRole(role, elem) {
+    // if element does not have role attribute
+    // AND element type is equal to role (if custom element has a type equaling shape) <-- remove?
+    // AND element is not INPUT
+    return !elem.attr('role') && (elem.attr('type') === role) && (elem[0].nodeName !== 'INPUT');
+  }
+
+  function getShape(attr, elem) {
+    var type = attr.type,
+        role = attr.role;
+
+    return ((type || role) === 'checkbox' || role === 'menuitemcheckbox') ? 'checkbox' :
+           ((type || role) === 'radio'    || role === 'menuitemradio') ? 'radio' :
+           (type === 'range'              || role === 'progressbar' || role === 'slider') ? 'range' : '';
+  }
+
+  return {
+    restrict: 'A',
+    require: 'ngModel',
+    priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value
+    compile: function(elem, attr) {
+      var shape = getShape(attr, elem);
+
+      return {
+        pre: function(scope, elem, attr, ngModel) {
+          if (shape === 'checkbox') {
+            //Use the input[checkbox] $isEmpty implementation for elements with checkbox roles
+            ngModel.$isEmpty = function(value) {
+              return value === false;
+            };
+          }
+        },
+        post: function(scope, elem, attr, ngModel) {
+          var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem, false);
+
+          function ngAriaWatchModelValue() {
+            return ngModel.$modelValue;
+          }
+
+          function getRadioReaction(newVal) {
+            var boolVal = (attr.value == ngModel.$viewValue);
+            elem.attr('aria-checked', boolVal);
+          }
+
+          function getCheckboxReaction() {
+            elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue));
+          }
+
+          switch (shape) {
+            case 'radio':
+            case 'checkbox':
+              if (shouldAttachRole(shape, elem)) {
+                elem.attr('role', shape);
+              }
+              if (shouldAttachAttr('aria-checked', 'ariaChecked', elem, false)) {
+                scope.$watch(ngAriaWatchModelValue, shape === 'radio' ?
+                    getRadioReaction : getCheckboxReaction);
+              }
+              if (needsTabIndex) {
+                elem.attr('tabindex', 0);
+              }
+              break;
+            case 'range':
+              if (shouldAttachRole(shape, elem)) {
+                elem.attr('role', 'slider');
+              }
+              if ($aria.config('ariaValue')) {
+                var needsAriaValuemin = !elem.attr('aria-valuemin') &&
+                    (attr.hasOwnProperty('min') || attr.hasOwnProperty('ngMin'));
+                var needsAriaValuemax = !elem.attr('aria-valuemax') &&
+                    (attr.hasOwnProperty('max') || attr.hasOwnProperty('ngMax'));
+                var needsAriaValuenow = !elem.attr('aria-valuenow');
+
+                if (needsAriaValuemin) {
+                  attr.$observe('min', function ngAriaValueMinReaction(newVal) {
+                    elem.attr('aria-valuemin', newVal);
+                  });
+                }
+                if (needsAriaValuemax) {
+                  attr.$observe('max', function ngAriaValueMinReaction(newVal) {
+                    elem.attr('aria-valuemax', newVal);
+                  });
+                }
+                if (needsAriaValuenow) {
+                  scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) {
+                    elem.attr('aria-valuenow', newVal);
+                  });
+                }
+              }
+              if (needsTabIndex) {
+                elem.attr('tabindex', 0);
+              }
+              break;
+          }
+
+          if (!attr.hasOwnProperty('ngRequired') && ngModel.$validators.required
+            && shouldAttachAttr('aria-required', 'ariaRequired', elem, false)) {
+            // ngModel.$error.required is undefined on custom controls
+            attr.$observe('required', function() {
+              elem.attr('aria-required', !!attr['required']);
+            });
+          }
+
+          if (shouldAttachAttr('aria-invalid', 'ariaInvalid', elem, true)) {
+            scope.$watch(function ngAriaInvalidWatch() {
+              return ngModel.$invalid;
+            }, function ngAriaInvalidReaction(newVal) {
+              elem.attr('aria-invalid', !!newVal);
+            });
+          }
+        }
+      };
+    }
+  };
+}])
+.directive('ngDisabled', ['$aria', function($aria) {
+  return $aria.$$watchExpr('ngDisabled', 'aria-disabled', nodeBlackList, false);
+}])
+.directive('ngMessages', function() {
+  return {
+    restrict: 'A',
+    require: '?ngMessages',
+    link: function(scope, elem, attr, ngMessages) {
+      if (!elem.attr('aria-live')) {
+        elem.attr('aria-live', 'assertive');
+      }
+    }
+  };
+})
+.directive('ngClick',['$aria', '$parse', function($aria, $parse) {
+  return {
+    restrict: 'A',
+    compile: function(elem, attr) {
+      var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true);
+      return function(scope, elem, attr) {
+
+        if (!isNodeOneOf(elem, nodeBlackList)) {
+
+          if ($aria.config('bindRoleForClick') && !elem.attr('role')) {
+            elem.attr('role', 'button');
+          }
+
+          if ($aria.config('tabindex') && !elem.attr('tabindex')) {
+            elem.attr('tabindex', 0);
+          }
+
+          if ($aria.config('bindKeypress') && !attr.ngKeypress) {
+            elem.on('keypress', function(event) {
+              var keyCode = event.which || event.keyCode;
+              if (keyCode === 32 || keyCode === 13) {
+                scope.$apply(callback);
+              }
+
+              function callback() {
+                fn(scope, { $event: event });
+              }
+            });
+          }
+        }
+      };
+    }
+  };
+}])
+.directive('ngDblclick', ['$aria', function($aria) {
+  return function(scope, elem, attr) {
+    if ($aria.config('tabindex') && !elem.attr('tabindex') && !isNodeOneOf(elem, nodeBlackList)) {
+      elem.attr('tabindex', 0);
+    }
+  };
+}]);
+
+
+})(window, window.angular);


[18/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it.js
new file mode 100644
index 0000000..9b6a662
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domenica",
+      "luned\u00ec",
+      "marted\u00ec",
+      "mercoled\u00ec",
+      "gioved\u00ec",
+      "venerd\u00ec",
+      "sabato"
+    ],
+    "ERANAMES": [
+      "a.C.",
+      "d.C."
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "gennaio",
+      "febbraio",
+      "marzo",
+      "aprile",
+      "maggio",
+      "giugno",
+      "luglio",
+      "agosto",
+      "settembre",
+      "ottobre",
+      "novembre",
+      "dicembre"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mer",
+      "gio",
+      "ven",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "gen",
+      "feb",
+      "mar",
+      "apr",
+      "mag",
+      "giu",
+      "lug",
+      "ago",
+      "set",
+      "ott",
+      "nov",
+      "dic"
+    ],
+    "STANDALONEMONTH": [
+      "Gennaio",
+      "Febbraio",
+      "Marzo",
+      "Aprile",
+      "Maggio",
+      "Giugno",
+      "Luglio",
+      "Agosto",
+      "Settembre",
+      "Ottobre",
+      "Novembre",
+      "Dicembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd MMM y HH:mm:ss",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "it",
+  "localeID": "it",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_iw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_iw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_iw.js
new file mode 100644
index 0000000..d4e5cfa
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_iw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6",
+      "\u05d0\u05d7\u05d4\u05f4\u05e6"
+    ],
+    "DAY": [
+      "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df",
+      "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
+      "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"
+    ],
+    "ERANAMES": [
+      "\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4",
+      "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"
+    ],
+    "ERAS": [
+      "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1",
+      "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u05d9\u05e0\u05d5\u05d0\u05e8",
+      "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05d9\u05dc",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+      "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+      "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+      "\u05d3\u05e6\u05de\u05d1\u05e8"
+    ],
+    "SHORTDAY": [
+      "\u05d9\u05d5\u05dd \u05d0\u05f3",
+      "\u05d9\u05d5\u05dd \u05d1\u05f3",
+      "\u05d9\u05d5\u05dd \u05d2\u05f3",
+      "\u05d9\u05d5\u05dd \u05d3\u05f3",
+      "\u05d9\u05d5\u05dd \u05d4\u05f3",
+      "\u05d9\u05d5\u05dd \u05d5\u05f3",
+      "\u05e9\u05d1\u05ea"
+    ],
+    "SHORTMONTH": [
+      "\u05d9\u05e0\u05d5\u05f3",
+      "\u05e4\u05d1\u05e8\u05f3",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05f3",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05f3",
+      "\u05e1\u05e4\u05d8\u05f3",
+      "\u05d0\u05d5\u05e7\u05f3",
+      "\u05e0\u05d5\u05d1\u05f3",
+      "\u05d3\u05e6\u05de\u05f3"
+    ],
+    "STANDALONEMONTH": [
+      "\u05d9\u05e0\u05d5\u05d0\u05e8",
+      "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05d9\u05dc",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+      "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+      "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+      "\u05d3\u05e6\u05de\u05d1\u05e8"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE, d \u05d1MMMM y",
+    "longDate": "d \u05d1MMMM y",
+    "medium": "d \u05d1MMM y H:mm:ss",
+    "mediumDate": "d \u05d1MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d.M.y H:mm",
+    "shortDate": "d.M.y",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20aa",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "iw",
+  "localeID": "iw",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i == 2 && vf.v == 0) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja-jp.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja-jp.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja-jp.js
new file mode 100644
index 0000000..daaede0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja-jp.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u5348\u524d",
+      "\u5348\u5f8c"
+    ],
+    "DAY": [
+      "\u65e5\u66dc\u65e5",
+      "\u6708\u66dc\u65e5",
+      "\u706b\u66dc\u65e5",
+      "\u6c34\u66dc\u65e5",
+      "\u6728\u66dc\u65e5",
+      "\u91d1\u66dc\u65e5",
+      "\u571f\u66dc\u65e5"
+    ],
+    "ERANAMES": [
+      "\u7d00\u5143\u524d",
+      "\u897f\u66a6"
+    ],
+    "ERAS": [
+      "\u7d00\u5143\u524d",
+      "\u897f\u66a6"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u65e5",
+      "\u6708",
+      "\u706b",
+      "\u6c34",
+      "\u6728",
+      "\u91d1",
+      "\u571f"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y/MM/dd H:mm:ss",
+    "mediumDate": "y/MM/dd",
+    "mediumTime": "H:mm:ss",
+    "short": "y/MM/dd H:mm",
+    "shortDate": "y/MM/dd",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ja-jp",
+  "localeID": "ja_JP",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja.js
new file mode 100644
index 0000000..f528314
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ja.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u5348\u524d",
+      "\u5348\u5f8c"
+    ],
+    "DAY": [
+      "\u65e5\u66dc\u65e5",
+      "\u6708\u66dc\u65e5",
+      "\u706b\u66dc\u65e5",
+      "\u6c34\u66dc\u65e5",
+      "\u6728\u66dc\u65e5",
+      "\u91d1\u66dc\u65e5",
+      "\u571f\u66dc\u65e5"
+    ],
+    "ERANAMES": [
+      "\u7d00\u5143\u524d",
+      "\u897f\u66a6"
+    ],
+    "ERAS": [
+      "\u7d00\u5143\u524d",
+      "\u897f\u66a6"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u65e5",
+      "\u6708",
+      "\u706b",
+      "\u6c34",
+      "\u6728",
+      "\u91d1",
+      "\u571f"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y/MM/dd H:mm:ss",
+    "mediumDate": "y/MM/dd",
+    "mediumTime": "H:mm:ss",
+    "short": "y/MM/dd H:mm",
+    "shortDate": "y/MM/dd",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ja",
+  "localeID": "ja",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo-cm.js
new file mode 100644
index 0000000..0365a68
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "mba\ua78cmba\ua78c",
+      "\u014bka mb\u0254\u0301t nji"
+    ],
+    "DAY": [
+      "S\u0254\u0301ndi",
+      "M\u0254\u0301ndi",
+      "\u00c1pta M\u0254\u0301ndi",
+      "W\u025b\u0301n\u025bs\u025bd\u025b",
+      "T\u0254\u0301s\u025bd\u025b",
+      "F\u025bl\u00e2y\u025bd\u025b",
+      "S\u00e1sid\u025b"
+    ],
+    "ERANAMES": [
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301",
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301"
+    ],
+    "ERAS": [
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301",
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ndu\u014bmbi Sa\u014b",
+      "P\u025bsa\u014b P\u025b\u0301p\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301t\u00e1t",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa",
+      "P\u025bsa\u014b Pataa",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa",
+      "P\u025bsa\u014b Saamb\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa",
+      "P\u025bsa\u014b N\u025bg\u025b\u0301m",
+      "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301",
+      "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1"
+    ],
+    "SHORTDAY": [
+      "S\u0254\u0301ndi",
+      "M\u0254\u0301ndi",
+      "\u00c1pta M\u0254\u0301ndi",
+      "W\u025b\u0301n\u025bs\u025bd\u025b",
+      "T\u0254\u0301s\u025bd\u025b",
+      "F\u025bl\u00e2y\u025bd\u025b",
+      "S\u00e1sid\u025b"
+    ],
+    "SHORTMONTH": [
+      "Ndu\u014bmbi Sa\u014b",
+      "P\u025bsa\u014b P\u025b\u0301p\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301t\u00e1t",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa",
+      "P\u025bsa\u014b Pataa",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa",
+      "P\u025bsa\u014b Saamb\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa",
+      "P\u025bsa\u014b N\u025bg\u025b\u0301m",
+      "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301",
+      "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1"
+    ],
+    "STANDALONEMONTH": [
+      "Ndu\u014bmbi Sa\u014b",
+      "P\u025bsa\u014b P\u025b\u0301p\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301t\u00e1t",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa",
+      "P\u025bsa\u014b Pataa",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa",
+      "P\u025bsa\u014b Saamb\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa",
+      "P\u025bsa\u014b N\u025bg\u025b\u0301m",
+      "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301",
+      "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "jgo-cm",
+  "localeID": "jgo_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo.js
new file mode 100644
index 0000000..a50b9b8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jgo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "mba\ua78cmba\ua78c",
+      "\u014bka mb\u0254\u0301t nji"
+    ],
+    "DAY": [
+      "S\u0254\u0301ndi",
+      "M\u0254\u0301ndi",
+      "\u00c1pta M\u0254\u0301ndi",
+      "W\u025b\u0301n\u025bs\u025bd\u025b",
+      "T\u0254\u0301s\u025bd\u025b",
+      "F\u025bl\u00e2y\u025bd\u025b",
+      "S\u00e1sid\u025b"
+    ],
+    "ERANAMES": [
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301",
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301"
+    ],
+    "ERAS": [
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 l\u025b\u025bn\u025b K\u025bl\u00eds\u025bt\u0254 g\u0254 \u0144\u0254\u0301",
+      "ts\u025btts\u025bt m\u025b\u014bgu\ua78c mi \u025b\u0301 f\u00fan\u025b K\u025bl\u00eds\u025bt\u0254 t\u0254\u0301 m\u0254\u0301"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ndu\u014bmbi Sa\u014b",
+      "P\u025bsa\u014b P\u025b\u0301p\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301t\u00e1t",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa",
+      "P\u025bsa\u014b Pataa",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa",
+      "P\u025bsa\u014b Saamb\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa",
+      "P\u025bsa\u014b N\u025bg\u025b\u0301m",
+      "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301",
+      "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1"
+    ],
+    "SHORTDAY": [
+      "S\u0254\u0301ndi",
+      "M\u0254\u0301ndi",
+      "\u00c1pta M\u0254\u0301ndi",
+      "W\u025b\u0301n\u025bs\u025bd\u025b",
+      "T\u0254\u0301s\u025bd\u025b",
+      "F\u025bl\u00e2y\u025bd\u025b",
+      "S\u00e1sid\u025b"
+    ],
+    "SHORTMONTH": [
+      "Ndu\u014bmbi Sa\u014b",
+      "P\u025bsa\u014b P\u025b\u0301p\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301t\u00e1t",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa",
+      "P\u025bsa\u014b Pataa",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa",
+      "P\u025bsa\u014b Saamb\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa",
+      "P\u025bsa\u014b N\u025bg\u025b\u0301m",
+      "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301",
+      "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1"
+    ],
+    "STANDALONEMONTH": [
+      "Ndu\u014bmbi Sa\u014b",
+      "P\u025bsa\u014b P\u025b\u0301p\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301t\u00e1t",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301kwa",
+      "P\u025bsa\u014b Pataa",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301nt\u00fak\u00fa",
+      "P\u025bsa\u014b Saamb\u00e1",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301f\u0254m",
+      "P\u025bsa\u014b P\u025b\u0301n\u025b\u0301pf\u00fa\ua78b\u00fa",
+      "P\u025bsa\u014b N\u025bg\u025b\u0301m",
+      "P\u025bsa\u014b Nts\u0254\u030cpm\u0254\u0301",
+      "P\u025bsa\u014b Nts\u0254\u030cpp\u00e1"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "jgo",
+  "localeID": "jgo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc-tz.js
new file mode 100644
index 0000000..d8b9a39
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "utuko",
+      "kyiukonyi"
+    ],
+    "DAY": [
+      "Jumapilyi",
+      "Jumatatuu",
+      "Jumanne",
+      "Jumatanu",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristu",
+      "Baada ya Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "jmc-tz",
+  "localeID": "jmc_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc.js
new file mode 100644
index 0000000..f081fdd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_jmc.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "utuko",
+      "kyiukonyi"
+    ],
+    "DAY": [
+      "Jumapilyi",
+      "Jumatatuu",
+      "Jumanne",
+      "Jumatanu",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristu",
+      "Baada ya Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "jmc",
+  "localeID": "jmc",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka-ge.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka-ge.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka-ge.js
new file mode 100644
index 0000000..24894af
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka-ge.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u10d9\u10d5\u10d8\u10e0\u10d0",
+      "\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8",
+      "\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8"
+    ],
+    "ERANAMES": [
+      "\u10eb\u10d5\u10d4\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7",
+      "\u10d0\u10ee\u10d0\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7"
+    ],
+    "ERAS": [
+      "\u10eb\u10d5. \u10ec.",
+      "\u10d0\u10ee. \u10ec."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8",
+      "\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8",
+      "\u10db\u10d0\u10e0\u10e2\u10d8",
+      "\u10d0\u10de\u10e0\u10d8\u10da\u10d8",
+      "\u10db\u10d0\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10da\u10d8\u10e1\u10d8",
+      "\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd",
+      "\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8"
+    ],
+    "SHORTDAY": [
+      "\u10d9\u10d5\u10d8",
+      "\u10dd\u10e0\u10e8",
+      "\u10e1\u10d0\u10db",
+      "\u10dd\u10d7\u10ee",
+      "\u10ee\u10e3\u10d7",
+      "\u10de\u10d0\u10e0",
+      "\u10e8\u10d0\u10d1"
+    ],
+    "SHORTMONTH": [
+      "\u10d8\u10d0\u10dc",
+      "\u10d7\u10d4\u10d1",
+      "\u10db\u10d0\u10e0",
+      "\u10d0\u10de\u10e0",
+      "\u10db\u10d0\u10d8",
+      "\u10d8\u10d5\u10dc",
+      "\u10d8\u10d5\u10da",
+      "\u10d0\u10d2\u10d5",
+      "\u10e1\u10d4\u10e5",
+      "\u10dd\u10e5\u10e2",
+      "\u10dc\u10dd\u10d4",
+      "\u10d3\u10d4\u10d9"
+    ],
+    "STANDALONEMONTH": [
+      "\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8",
+      "\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8",
+      "\u10db\u10d0\u10e0\u10e2\u10d8",
+      "\u10d0\u10de\u10e0\u10d8\u10da\u10d8",
+      "\u10db\u10d0\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10da\u10d8\u10e1\u10d8",
+      "\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd",
+      "\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GEL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ka-ge",
+  "localeID": "ka_GE",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka.js
new file mode 100644
index 0000000..f70ade8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ka.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u10d9\u10d5\u10d8\u10e0\u10d0",
+      "\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8",
+      "\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8",
+      "\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8"
+    ],
+    "ERANAMES": [
+      "\u10eb\u10d5\u10d4\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7",
+      "\u10d0\u10ee\u10d0\u10da\u10d8 \u10ec\u10d4\u10da\u10d7\u10d0\u10e6\u10e0\u10d8\u10ea\u10ee\u10d5\u10d8\u10d7"
+    ],
+    "ERAS": [
+      "\u10eb\u10d5. \u10ec.",
+      "\u10d0\u10ee. \u10ec."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8",
+      "\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8",
+      "\u10db\u10d0\u10e0\u10e2\u10d8",
+      "\u10d0\u10de\u10e0\u10d8\u10da\u10d8",
+      "\u10db\u10d0\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10da\u10d8\u10e1\u10d8",
+      "\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd",
+      "\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8"
+    ],
+    "SHORTDAY": [
+      "\u10d9\u10d5\u10d8",
+      "\u10dd\u10e0\u10e8",
+      "\u10e1\u10d0\u10db",
+      "\u10dd\u10d7\u10ee",
+      "\u10ee\u10e3\u10d7",
+      "\u10de\u10d0\u10e0",
+      "\u10e8\u10d0\u10d1"
+    ],
+    "SHORTMONTH": [
+      "\u10d8\u10d0\u10dc",
+      "\u10d7\u10d4\u10d1",
+      "\u10db\u10d0\u10e0",
+      "\u10d0\u10de\u10e0",
+      "\u10db\u10d0\u10d8",
+      "\u10d8\u10d5\u10dc",
+      "\u10d8\u10d5\u10da",
+      "\u10d0\u10d2\u10d5",
+      "\u10e1\u10d4\u10e5",
+      "\u10dd\u10e5\u10e2",
+      "\u10dc\u10dd\u10d4",
+      "\u10d3\u10d4\u10d9"
+    ],
+    "STANDALONEMONTH": [
+      "\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8",
+      "\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8",
+      "\u10db\u10d0\u10e0\u10e2\u10d8",
+      "\u10d0\u10de\u10e0\u10d8\u10da\u10d8",
+      "\u10db\u10d0\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8",
+      "\u10d8\u10d5\u10da\u10d8\u10e1\u10d8",
+      "\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd",
+      "\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8",
+      "\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GEL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ka",
+  "localeID": "ka",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab-dz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab-dz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab-dz.js
new file mode 100644
index 0000000..feb2436
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab-dz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "n tufat",
+      "n tmeddit"
+    ],
+    "DAY": [
+      "Yanass",
+      "Sanass",
+      "Kra\u1e0dass",
+      "Ku\u1e93ass",
+      "Samass",
+      "S\u1e0disass",
+      "Sayass"
+    ],
+    "ERANAMES": [
+      "send talalit n \u0190isa",
+      "seld talalit n \u0190isa"
+    ],
+    "ERAS": [
+      "snd. T.\u0190",
+      "sld. T.\u0190"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Yennayer",
+      "Fu\u1e5bar",
+      "Me\u0263res",
+      "Yebrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyu",
+      "\u0194uct",
+      "Ctembe\u1e5b",
+      "Tube\u1e5b",
+      "Nunembe\u1e5b",
+      "Du\u01e7embe\u1e5b"
+    ],
+    "SHORTDAY": [
+      "Yan",
+      "San",
+      "Kra\u1e0d",
+      "Ku\u1e93",
+      "Sam",
+      "S\u1e0dis",
+      "Say"
+    ],
+    "SHORTMONTH": [
+      "Yen",
+      "Fur",
+      "Me\u0263",
+      "Yeb",
+      "May",
+      "Yun",
+      "Yul",
+      "\u0194uc",
+      "Cte",
+      "Tub",
+      "Nun",
+      "Du\u01e7"
+    ],
+    "STANDALONEMONTH": [
+      "Yennayer",
+      "Fu\u1e5bar",
+      "Me\u0263res",
+      "Yebrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyu",
+      "\u0194uct",
+      "Ctembe\u1e5b",
+      "Tube\u1e5b",
+      "Nunembe\u1e5b",
+      "Du\u01e7embe\u1e5b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "kab-dz",
+  "localeID": "kab_DZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab.js
new file mode 100644
index 0000000..0c07e72
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kab.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "n tufat",
+      "n tmeddit"
+    ],
+    "DAY": [
+      "Yanass",
+      "Sanass",
+      "Kra\u1e0dass",
+      "Ku\u1e93ass",
+      "Samass",
+      "S\u1e0disass",
+      "Sayass"
+    ],
+    "ERANAMES": [
+      "send talalit n \u0190isa",
+      "seld talalit n \u0190isa"
+    ],
+    "ERAS": [
+      "snd. T.\u0190",
+      "sld. T.\u0190"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Yennayer",
+      "Fu\u1e5bar",
+      "Me\u0263res",
+      "Yebrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyu",
+      "\u0194uct",
+      "Ctembe\u1e5b",
+      "Tube\u1e5b",
+      "Nunembe\u1e5b",
+      "Du\u01e7embe\u1e5b"
+    ],
+    "SHORTDAY": [
+      "Yan",
+      "San",
+      "Kra\u1e0d",
+      "Ku\u1e93",
+      "Sam",
+      "S\u1e0dis",
+      "Say"
+    ],
+    "SHORTMONTH": [
+      "Yen",
+      "Fur",
+      "Me\u0263",
+      "Yeb",
+      "May",
+      "Yun",
+      "Yul",
+      "\u0194uc",
+      "Cte",
+      "Tub",
+      "Nun",
+      "Du\u01e7"
+    ],
+    "STANDALONEMONTH": [
+      "Yennayer",
+      "Fu\u1e5bar",
+      "Me\u0263res",
+      "Yebrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyu",
+      "\u0194uct",
+      "Ctembe\u1e5b",
+      "Tube\u1e5b",
+      "Nunembe\u1e5b",
+      "Du\u01e7embe\u1e5b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "kab",
+  "localeID": "kab",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam-ke.js
new file mode 100644
index 0000000..4b8adc5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0128yakwakya",
+      "\u0128yaw\u0129oo"
+    ],
+    "DAY": [
+      "Wa kyumwa",
+      "Wa kwamb\u0129l\u0129lya",
+      "Wa kel\u0129",
+      "Wa katat\u0169",
+      "Wa kana",
+      "Wa katano",
+      "Wa thanthat\u0169"
+    ],
+    "ERANAMES": [
+      "Mbee wa Yes\u0169",
+      "\u0128tina wa Yes\u0169"
+    ],
+    "ERAS": [
+      "MY",
+      "IY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mwai wa mbee",
+      "Mwai wa kel\u0129",
+      "Mwai wa katat\u0169",
+      "Mwai wa kana",
+      "Mwai wa katano",
+      "Mwai wa thanthat\u0169",
+      "Mwai wa muonza",
+      "Mwai wa nyaanya",
+      "Mwai wa kenda",
+      "Mwai wa \u0129kumi",
+      "Mwai wa \u0129kumi na \u0129mwe",
+      "Mwai wa \u0129kumi na il\u0129"
+    ],
+    "SHORTDAY": [
+      "Wky",
+      "Wkw",
+      "Wkl",
+      "Wt\u0169",
+      "Wkn",
+      "Wtn",
+      "Wth"
+    ],
+    "SHORTMONTH": [
+      "Mbe",
+      "Kel",
+      "Kt\u0169",
+      "Kan",
+      "Ktn",
+      "Tha",
+      "Moo",
+      "Nya",
+      "Knd",
+      "\u0128ku",
+      "\u0128km",
+      "\u0128kl"
+    ],
+    "STANDALONEMONTH": [
+      "Mwai wa mbee",
+      "Mwai wa kel\u0129",
+      "Mwai wa katat\u0169",
+      "Mwai wa kana",
+      "Mwai wa katano",
+      "Mwai wa thanthat\u0169",
+      "Mwai wa muonza",
+      "Mwai wa nyaanya",
+      "Mwai wa kenda",
+      "Mwai wa \u0129kumi",
+      "Mwai wa \u0129kumi na \u0129mwe",
+      "Mwai wa \u0129kumi na il\u0129"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kam-ke",
+  "localeID": "kam_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam.js
new file mode 100644
index 0000000..ad16d67
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kam.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0128yakwakya",
+      "\u0128yaw\u0129oo"
+    ],
+    "DAY": [
+      "Wa kyumwa",
+      "Wa kwamb\u0129l\u0129lya",
+      "Wa kel\u0129",
+      "Wa katat\u0169",
+      "Wa kana",
+      "Wa katano",
+      "Wa thanthat\u0169"
+    ],
+    "ERANAMES": [
+      "Mbee wa Yes\u0169",
+      "\u0128tina wa Yes\u0169"
+    ],
+    "ERAS": [
+      "MY",
+      "IY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mwai wa mbee",
+      "Mwai wa kel\u0129",
+      "Mwai wa katat\u0169",
+      "Mwai wa kana",
+      "Mwai wa katano",
+      "Mwai wa thanthat\u0169",
+      "Mwai wa muonza",
+      "Mwai wa nyaanya",
+      "Mwai wa kenda",
+      "Mwai wa \u0129kumi",
+      "Mwai wa \u0129kumi na \u0129mwe",
+      "Mwai wa \u0129kumi na il\u0129"
+    ],
+    "SHORTDAY": [
+      "Wky",
+      "Wkw",
+      "Wkl",
+      "Wt\u0169",
+      "Wkn",
+      "Wtn",
+      "Wth"
+    ],
+    "SHORTMONTH": [
+      "Mbe",
+      "Kel",
+      "Kt\u0169",
+      "Kan",
+      "Ktn",
+      "Tha",
+      "Moo",
+      "Nya",
+      "Knd",
+      "\u0128ku",
+      "\u0128km",
+      "\u0128kl"
+    ],
+    "STANDALONEMONTH": [
+      "Mwai wa mbee",
+      "Mwai wa kel\u0129",
+      "Mwai wa katat\u0169",
+      "Mwai wa kana",
+      "Mwai wa katano",
+      "Mwai wa thanthat\u0169",
+      "Mwai wa muonza",
+      "Mwai wa nyaanya",
+      "Mwai wa kenda",
+      "Mwai wa \u0129kumi",
+      "Mwai wa \u0129kumi na \u0129mwe",
+      "Mwai wa \u0129kumi na il\u0129"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kam",
+  "localeID": "kam",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde-tz.js
new file mode 100644
index 0000000..2a0de5b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Muhi",
+      "Chilo"
+    ],
+    "DAY": [
+      "Liduva lyapili",
+      "Liduva lyatatu",
+      "Liduva lyanchechi",
+      "Liduva lyannyano",
+      "Liduva lyannyano na linji",
+      "Liduva lyannyano na mavili",
+      "Liduva litandi"
+    ],
+    "ERANAMES": [
+      "Akanapawa Yesu",
+      "Nankuida Yesu"
+    ],
+    "ERAS": [
+      "AY",
+      "NY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mwedi Ntandi",
+      "Mwedi wa Pili",
+      "Mwedi wa Tatu",
+      "Mwedi wa Nchechi",
+      "Mwedi wa Nnyano",
+      "Mwedi wa Nnyano na Umo",
+      "Mwedi wa Nnyano na Mivili",
+      "Mwedi wa Nnyano na Mitatu",
+      "Mwedi wa Nnyano na Nchechi",
+      "Mwedi wa Nnyano na Nnyano",
+      "Mwedi wa Nnyano na Nnyano na U",
+      "Mwedi wa Nnyano na Nnyano na M"
+    ],
+    "SHORTDAY": [
+      "Ll2",
+      "Ll3",
+      "Ll4",
+      "Ll5",
+      "Ll6",
+      "Ll7",
+      "Ll1"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Mwedi Ntandi",
+      "Mwedi wa Pili",
+      "Mwedi wa Tatu",
+      "Mwedi wa Nchechi",
+      "Mwedi wa Nnyano",
+      "Mwedi wa Nnyano na Umo",
+      "Mwedi wa Nnyano na Mivili",
+      "Mwedi wa Nnyano na Mitatu",
+      "Mwedi wa Nnyano na Nchechi",
+      "Mwedi wa Nnyano na Nnyano",
+      "Mwedi wa Nnyano na Nnyano na U",
+      "Mwedi wa Nnyano na Nnyano na M"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kde-tz",
+  "localeID": "kde_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde.js
new file mode 100644
index 0000000..184e030
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kde.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Muhi",
+      "Chilo"
+    ],
+    "DAY": [
+      "Liduva lyapili",
+      "Liduva lyatatu",
+      "Liduva lyanchechi",
+      "Liduva lyannyano",
+      "Liduva lyannyano na linji",
+      "Liduva lyannyano na mavili",
+      "Liduva litandi"
+    ],
+    "ERANAMES": [
+      "Akanapawa Yesu",
+      "Nankuida Yesu"
+    ],
+    "ERAS": [
+      "AY",
+      "NY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mwedi Ntandi",
+      "Mwedi wa Pili",
+      "Mwedi wa Tatu",
+      "Mwedi wa Nchechi",
+      "Mwedi wa Nnyano",
+      "Mwedi wa Nnyano na Umo",
+      "Mwedi wa Nnyano na Mivili",
+      "Mwedi wa Nnyano na Mitatu",
+      "Mwedi wa Nnyano na Nchechi",
+      "Mwedi wa Nnyano na Nnyano",
+      "Mwedi wa Nnyano na Nnyano na U",
+      "Mwedi wa Nnyano na Nnyano na M"
+    ],
+    "SHORTDAY": [
+      "Ll2",
+      "Ll3",
+      "Ll4",
+      "Ll5",
+      "Ll6",
+      "Ll7",
+      "Ll1"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Mwedi Ntandi",
+      "Mwedi wa Pili",
+      "Mwedi wa Tatu",
+      "Mwedi wa Nchechi",
+      "Mwedi wa Nnyano",
+      "Mwedi wa Nnyano na Umo",
+      "Mwedi wa Nnyano na Mivili",
+      "Mwedi wa Nnyano na Mitatu",
+      "Mwedi wa Nnyano na Nchechi",
+      "Mwedi wa Nnyano na Nnyano",
+      "Mwedi wa Nnyano na Nnyano na U",
+      "Mwedi wa Nnyano na Nnyano na M"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kde",
+  "localeID": "kde",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea-cv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea-cv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea-cv.js
new file mode 100644
index 0000000..e396a69
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea-cv.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "dumingu",
+      "sigunda-fera",
+      "tersa-fera",
+      "kuarta-fera",
+      "kinta-fera",
+      "sesta-fera",
+      "sabadu"
+    ],
+    "ERANAMES": [
+      "Antis di Kristu",
+      "Dispos di Kristu"
+    ],
+    "ERAS": [
+      "AK",
+      "DK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janeru",
+      "Febreru",
+      "Marsu",
+      "Abril",
+      "Maiu",
+      "Junhu",
+      "Julhu",
+      "Agostu",
+      "Setenbru",
+      "Otubru",
+      "Nuvenbru",
+      "Dizenbru"
+    ],
+    "SHORTDAY": [
+      "dum",
+      "sig",
+      "ter",
+      "kua",
+      "kin",
+      "ses",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Abr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Set",
+      "Otu",
+      "Nuv",
+      "Diz"
+    ],
+    "STANDALONEMONTH": [
+      "Janeru",
+      "Febreru",
+      "Marsu",
+      "Abril",
+      "Maiu",
+      "Junhu",
+      "Julhu",
+      "Agostu",
+      "Setenbru",
+      "Otubru",
+      "Nuvenbru",
+      "Dizenbru"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'di' MMMM 'di' y",
+    "longDate": "d 'di' MMMM 'di' y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CVE",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "kea-cv",
+  "localeID": "kea_CV",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea.js
new file mode 100644
index 0000000..7bd3cab
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kea.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "dumingu",
+      "sigunda-fera",
+      "tersa-fera",
+      "kuarta-fera",
+      "kinta-fera",
+      "sesta-fera",
+      "sabadu"
+    ],
+    "ERANAMES": [
+      "Antis di Kristu",
+      "Dispos di Kristu"
+    ],
+    "ERAS": [
+      "AK",
+      "DK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janeru",
+      "Febreru",
+      "Marsu",
+      "Abril",
+      "Maiu",
+      "Junhu",
+      "Julhu",
+      "Agostu",
+      "Setenbru",
+      "Otubru",
+      "Nuvenbru",
+      "Dizenbru"
+    ],
+    "SHORTDAY": [
+      "dum",
+      "sig",
+      "ter",
+      "kua",
+      "kin",
+      "ses",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Abr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Set",
+      "Otu",
+      "Nuv",
+      "Diz"
+    ],
+    "STANDALONEMONTH": [
+      "Janeru",
+      "Febreru",
+      "Marsu",
+      "Abril",
+      "Maiu",
+      "Junhu",
+      "Julhu",
+      "Agostu",
+      "Setenbru",
+      "Otubru",
+      "Nuvenbru",
+      "Dizenbru"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'di' MMMM 'di' y",
+    "longDate": "d 'di' MMMM 'di' y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CVE",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "kea",
+  "localeID": "kea",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq-ml.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq-ml.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq-ml.js
new file mode 100644
index 0000000..5ec7148
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq-ml.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Adduha",
+      "Aluula"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atini",
+      "Atalata",
+      "Alarba",
+      "Alhamiisa",
+      "Aljuma",
+      "Assabdu"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa jamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alj",
+      "Ass"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "khq-ml",
+  "localeID": "khq_ML",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq.js
new file mode 100644
index 0000000..8035933
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_khq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Adduha",
+      "Aluula"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atini",
+      "Atalata",
+      "Alarba",
+      "Alhamiisa",
+      "Aljuma",
+      "Assabdu"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa jamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alj",
+      "Ass"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "khq",
+  "localeID": "khq",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki-ke.js
new file mode 100644
index 0000000..b049763
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Kiroko",
+      "Hwa\u0129-in\u0129"
+    ],
+    "DAY": [
+      "Kiumia",
+      "Njumatat\u0169",
+      "Njumaine",
+      "Njumatana",
+      "Aramithi",
+      "Njumaa",
+      "Njumamothi"
+    ],
+    "ERANAMES": [
+      "Mbere ya Kristo",
+      "Thutha wa Kristo"
+    ],
+    "ERAS": [
+      "MK",
+      "TK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Njenuar\u0129",
+      "Mwere wa ker\u0129",
+      "Mwere wa gatat\u0169",
+      "Mwere wa kana",
+      "Mwere wa gatano",
+      "Mwere wa gatandat\u0169",
+      "Mwere wa m\u0169gwanja",
+      "Mwere wa kanana",
+      "Mwere wa kenda",
+      "Mwere wa ik\u0169mi",
+      "Mwere wa ik\u0169mi na \u0169mwe",
+      "Ndithemba"
+    ],
+    "SHORTDAY": [
+      "KMA",
+      "NTT",
+      "NMN",
+      "NMT",
+      "ART",
+      "NMA",
+      "NMM"
+    ],
+    "SHORTMONTH": [
+      "JEN",
+      "WKR",
+      "WGT",
+      "WKN",
+      "WTN",
+      "WTD",
+      "WMJ",
+      "WNN",
+      "WKD",
+      "WIK",
+      "WMW",
+      "DIT"
+    ],
+    "STANDALONEMONTH": [
+      "Njenuar\u0129",
+      "Mwere wa ker\u0129",
+      "Mwere wa gatat\u0169",
+      "Mwere wa kana",
+      "Mwere wa gatano",
+      "Mwere wa gatandat\u0169",
+      "Mwere wa m\u0169gwanja",
+      "Mwere wa kanana",
+      "Mwere wa kenda",
+      "Mwere wa ik\u0169mi",
+      "Mwere wa ik\u0169mi na \u0169mwe",
+      "Ndithemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ki-ke",
+  "localeID": "ki_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki.js
new file mode 100644
index 0000000..f79a457
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ki.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Kiroko",
+      "Hwa\u0129-in\u0129"
+    ],
+    "DAY": [
+      "Kiumia",
+      "Njumatat\u0169",
+      "Njumaine",
+      "Njumatana",
+      "Aramithi",
+      "Njumaa",
+      "Njumamothi"
+    ],
+    "ERANAMES": [
+      "Mbere ya Kristo",
+      "Thutha wa Kristo"
+    ],
+    "ERAS": [
+      "MK",
+      "TK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Njenuar\u0129",
+      "Mwere wa ker\u0129",
+      "Mwere wa gatat\u0169",
+      "Mwere wa kana",
+      "Mwere wa gatano",
+      "Mwere wa gatandat\u0169",
+      "Mwere wa m\u0169gwanja",
+      "Mwere wa kanana",
+      "Mwere wa kenda",
+      "Mwere wa ik\u0169mi",
+      "Mwere wa ik\u0169mi na \u0169mwe",
+      "Ndithemba"
+    ],
+    "SHORTDAY": [
+      "KMA",
+      "NTT",
+      "NMN",
+      "NMT",
+      "ART",
+      "NMA",
+      "NMM"
+    ],
+    "SHORTMONTH": [
+      "JEN",
+      "WKR",
+      "WGT",
+      "WKN",
+      "WTN",
+      "WTD",
+      "WMJ",
+      "WNN",
+      "WKD",
+      "WIK",
+      "WMW",
+      "DIT"
+    ],
+    "STANDALONEMONTH": [
+      "Njenuar\u0129",
+      "Mwere wa ker\u0129",
+      "Mwere wa gatat\u0169",
+      "Mwere wa kana",
+      "Mwere wa gatano",
+      "Mwere wa gatandat\u0169",
+      "Mwere wa m\u0169gwanja",
+      "Mwere wa kanana",
+      "Mwere wa kenda",
+      "Mwere wa ik\u0169mi",
+      "Mwere wa ik\u0169mi na \u0169mwe",
+      "Ndithemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ki",
+  "localeID": "ki",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[21/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mr.js
new file mode 100644
index 0000000..e2077a6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MRO",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-mr",
+  "localeID": "fr_MR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mu.js
new file mode 100644
index 0000000..49d3369
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MURs",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-mu",
+  "localeID": "fr_MU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-nc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-nc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-nc.js
new file mode 100644
index 0000000..c24e82a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-nc.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFP",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-nc",
+  "localeID": "fr_NC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ne.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ne.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ne.js
new file mode 100644
index 0000000..0b605a2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ne.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-ne",
+  "localeID": "fr_NE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pf.js
new file mode 100644
index 0000000..6ff4bcc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pf.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFP",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-pf",
+  "localeID": "fr_PF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pm.js
new file mode 100644
index 0000000..4b715dc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-pm.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-pm",
+  "localeID": "fr_PM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-re.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-re.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-re.js
new file mode 100644
index 0000000..d25850c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-re.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-re",
+  "localeID": "fr_RE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-rw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-rw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-rw.js
new file mode 100644
index 0000000..1ecd2a0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-rw.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RF",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-rw",
+  "localeID": "fr_RW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sc.js
new file mode 100644
index 0000000..4cbc714
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sc.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SCR",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-sc",
+  "localeID": "fr_SC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sn.js
new file mode 100644
index 0000000..89ba8ed
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-sn",
+  "localeID": "fr_SN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sy.js
new file mode 100644
index 0000000..d551707
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-sy.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-sy",
+  "localeID": "fr_SY",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-td.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-td.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-td.js
new file mode 100644
index 0000000..09753ea
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-td.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-td",
+  "localeID": "fr_TD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tg.js
new file mode 100644
index 0000000..ae0123f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-tg",
+  "localeID": "fr_TG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tn.js
new file mode 100644
index 0000000..0dec1f1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-tn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-tn",
+  "localeID": "fr_TN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-vu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-vu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-vu.js
new file mode 100644
index 0000000..6553fe4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-vu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "VUV",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-vu",
+  "localeID": "fr_VU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-wf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-wf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-wf.js
new file mode 100644
index 0000000..3b4d376
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-wf.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFP",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-wf",
+  "localeID": "fr_WF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-yt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-yt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-yt.js
new file mode 100644
index 0000000..e4651cd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-yt.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-yt",
+  "localeID": "fr_YT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr.js
new file mode 100644
index 0000000..895c9ac
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr",
+  "localeID": "fr",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur-it.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur-it.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur-it.js
new file mode 100644
index 0000000..4b5472c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur-it.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.",
+      "p."
+    ],
+    "DAY": [
+      "domenie",
+      "lunis",
+      "martars",
+      "miercus",
+      "joibe",
+      "vinars",
+      "sabide"
+    ],
+    "ERANAMES": [
+      "pdC",
+      "ddC"
+    ],
+    "ERAS": [
+      "pdC",
+      "ddC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Zen\u00e2r",
+      "Fevr\u00e2r",
+      "Mar\u00e7",
+      "Avr\u00eel",
+      "Mai",
+      "Jugn",
+      "Lui",
+      "Avost",
+      "Setembar",
+      "Otubar",
+      "Novembar",
+      "Dicembar"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mie",
+      "joi",
+      "vin",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "Zen",
+      "Fev",
+      "Mar",
+      "Avr",
+      "Mai",
+      "Jug",
+      "Lui",
+      "Avo",
+      "Set",
+      "Otu",
+      "Nov",
+      "Dic"
+    ],
+    "STANDALONEMONTH": [
+      "Zen\u00e2r",
+      "Fevr\u00e2r",
+      "Mar\u00e7",
+      "Avr\u00eel",
+      "Mai",
+      "Jugn",
+      "Lui",
+      "Avost",
+      "Setembar",
+      "Otubar",
+      "Novembar",
+      "Dicembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d 'di' MMMM 'dal' y",
+    "longDate": "d 'di' MMMM 'dal' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fur-it",
+  "localeID": "fur_IT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur.js
new file mode 100644
index 0000000..f25f440
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fur.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.",
+      "p."
+    ],
+    "DAY": [
+      "domenie",
+      "lunis",
+      "martars",
+      "miercus",
+      "joibe",
+      "vinars",
+      "sabide"
+    ],
+    "ERANAMES": [
+      "pdC",
+      "ddC"
+    ],
+    "ERAS": [
+      "pdC",
+      "ddC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Zen\u00e2r",
+      "Fevr\u00e2r",
+      "Mar\u00e7",
+      "Avr\u00eel",
+      "Mai",
+      "Jugn",
+      "Lui",
+      "Avost",
+      "Setembar",
+      "Otubar",
+      "Novembar",
+      "Dicembar"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mie",
+      "joi",
+      "vin",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "Zen",
+      "Fev",
+      "Mar",
+      "Avr",
+      "Mai",
+      "Jug",
+      "Lui",
+      "Avo",
+      "Set",
+      "Otu",
+      "Nov",
+      "Dic"
+    ],
+    "STANDALONEMONTH": [
+      "Zen\u00e2r",
+      "Fevr\u00e2r",
+      "Mar\u00e7",
+      "Avr\u00eel",
+      "Mai",
+      "Jugn",
+      "Lui",
+      "Avost",
+      "Setembar",
+      "Otubar",
+      "Novembar",
+      "Dicembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d 'di' MMMM 'dal' y",
+    "longDate": "d 'di' MMMM 'dal' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fur",
+  "localeID": "fur",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy-nl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy-nl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy-nl.js
new file mode 100644
index 0000000..8b6214e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy-nl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "snein",
+      "moandei",
+      "tiisdei",
+      "woansdei",
+      "tongersdei",
+      "freed",
+      "sneon"
+    ],
+    "ERANAMES": [
+      "Foar Kristus",
+      "nei Kristus"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "n.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "jannewaris",
+      "febrewaris",
+      "maart",
+      "april",
+      "maaie",
+      "juny",
+      "july",
+      "augustus",
+      "septimber",
+      "oktober",
+      "novimber",
+      "desimber"
+    ],
+    "SHORTDAY": [
+      "si",
+      "mo",
+      "ti",
+      "wo",
+      "to",
+      "fr",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mai",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "jannewaris",
+      "febrewaris",
+      "maart",
+      "april",
+      "maaie",
+      "juny",
+      "july",
+      "augustus",
+      "septimber",
+      "oktober",
+      "novimber",
+      "desimber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0",
+        "negSuf": "-",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fy-nl",
+  "localeID": "fy_NL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy.js
new file mode 100644
index 0000000..06169fc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fy.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "snein",
+      "moandei",
+      "tiisdei",
+      "woansdei",
+      "tongersdei",
+      "freed",
+      "sneon"
+    ],
+    "ERANAMES": [
+      "Foar Kristus",
+      "nei Kristus"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "n.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "jannewaris",
+      "febrewaris",
+      "maart",
+      "april",
+      "maaie",
+      "juny",
+      "july",
+      "augustus",
+      "septimber",
+      "oktober",
+      "novimber",
+      "desimber"
+    ],
+    "SHORTDAY": [
+      "si",
+      "mo",
+      "ti",
+      "wo",
+      "to",
+      "fr",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mai",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "jannewaris",
+      "febrewaris",
+      "maart",
+      "april",
+      "maaie",
+      "juny",
+      "july",
+      "augustus",
+      "septimber",
+      "oktober",
+      "novimber",
+      "desimber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0",
+        "negSuf": "-",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fy",
+  "localeID": "fy",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga-ie.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga-ie.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga-ie.js
new file mode 100644
index 0000000..13b91b7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga-ie.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "D\u00e9 Domhnaigh",
+      "D\u00e9 Luain",
+      "D\u00e9 M\u00e1irt",
+      "D\u00e9 C\u00e9adaoin",
+      "D\u00e9ardaoin",
+      "D\u00e9 hAoine",
+      "D\u00e9 Sathairn"
+    ],
+    "ERANAMES": [
+      "Roimh Chr\u00edost",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ean\u00e1ir",
+      "Feabhra",
+      "M\u00e1rta",
+      "Aibre\u00e1n",
+      "Bealtaine",
+      "Meitheamh",
+      "I\u00fail",
+      "L\u00fanasa",
+      "Me\u00e1n F\u00f3mhair",
+      "Deireadh F\u00f3mhair",
+      "Samhain",
+      "Nollaig"
+    ],
+    "SHORTDAY": [
+      "Domh",
+      "Luan",
+      "M\u00e1irt",
+      "C\u00e9ad",
+      "D\u00e9ar",
+      "Aoine",
+      "Sath"
+    ],
+    "SHORTMONTH": [
+      "Ean",
+      "Feabh",
+      "M\u00e1rta",
+      "Aib",
+      "Beal",
+      "Meith",
+      "I\u00fail",
+      "L\u00fan",
+      "MF\u00f3mh",
+      "DF\u00f3mh",
+      "Samh",
+      "Noll"
+    ],
+    "STANDALONEMONTH": [
+      "Ean\u00e1ir",
+      "Feabhra",
+      "M\u00e1rta",
+      "Aibre\u00e1n",
+      "Bealtaine",
+      "Meitheamh",
+      "I\u00fail",
+      "L\u00fanasa",
+      "Me\u00e1n F\u00f3mhair",
+      "Deireadh F\u00f3mhair",
+      "Samhain",
+      "Nollaig"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ga-ie",
+  "localeID": "ga_IE",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n >= 3 && n <= 6) {    return PLURAL_CATEGORY.FEW;  }  if (n >= 7 && n <= 10) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga.js
new file mode 100644
index 0000000..6aa830a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ga.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "D\u00e9 Domhnaigh",
+      "D\u00e9 Luain",
+      "D\u00e9 M\u00e1irt",
+      "D\u00e9 C\u00e9adaoin",
+      "D\u00e9ardaoin",
+      "D\u00e9 hAoine",
+      "D\u00e9 Sathairn"
+    ],
+    "ERANAMES": [
+      "Roimh Chr\u00edost",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ean\u00e1ir",
+      "Feabhra",
+      "M\u00e1rta",
+      "Aibre\u00e1n",
+      "Bealtaine",
+      "Meitheamh",
+      "I\u00fail",
+      "L\u00fanasa",
+      "Me\u00e1n F\u00f3mhair",
+      "Deireadh F\u00f3mhair",
+      "Samhain",
+      "Nollaig"
+    ],
+    "SHORTDAY": [
+      "Domh",
+      "Luan",
+      "M\u00e1irt",
+      "C\u00e9ad",
+      "D\u00e9ar",
+      "Aoine",
+      "Sath"
+    ],
+    "SHORTMONTH": [
+      "Ean",
+      "Feabh",
+      "M\u00e1rta",
+      "Aib",
+      "Beal",
+      "Meith",
+      "I\u00fail",
+      "L\u00fan",
+      "MF\u00f3mh",
+      "DF\u00f3mh",
+      "Samh",
+      "Noll"
+    ],
+    "STANDALONEMONTH": [
+      "Ean\u00e1ir",
+      "Feabhra",
+      "M\u00e1rta",
+      "Aibre\u00e1n",
+      "Bealtaine",
+      "Meitheamh",
+      "I\u00fail",
+      "L\u00fanasa",
+      "Me\u00e1n F\u00f3mhair",
+      "Deireadh F\u00f3mhair",
+      "Samhain",
+      "Nollaig"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ga",
+  "localeID": "ga",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n >= 3 && n <= 6) {    return PLURAL_CATEGORY.FEW;  }  if (n >= 7 && n <= 10) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd-gb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd-gb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd-gb.js
new file mode 100644
index 0000000..732788c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd-gb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "m",
+      "f"
+    ],
+    "DAY": [
+      "DiD\u00f2mhnaich",
+      "DiLuain",
+      "DiM\u00e0irt",
+      "DiCiadain",
+      "DiarDaoin",
+      "DihAoine",
+      "DiSathairne"
+    ],
+    "ERANAMES": [
+      "Ro Chr\u00ecosta",
+      "An d\u00e8idh Chr\u00ecosta"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "dhen Fhaoilleach",
+      "dhen Ghearran",
+      "dhen Mh\u00e0rt",
+      "dhen Ghiblean",
+      "dhen Ch\u00e8itean",
+      "dhen \u00d2gmhios",
+      "dhen Iuchar",
+      "dhen L\u00f9nastal",
+      "dhen t-Sultain",
+      "dhen D\u00e0mhair",
+      "dhen t-Samhain",
+      "dhen D\u00f9bhlachd"
+    ],
+    "SHORTDAY": [
+      "DiD",
+      "DiL",
+      "DiM",
+      "DiC",
+      "Dia",
+      "Dih",
+      "DiS"
+    ],
+    "SHORTMONTH": [
+      "Faoi",
+      "Gearr",
+      "M\u00e0rt",
+      "Gibl",
+      "C\u00e8it",
+      "\u00d2gmh",
+      "Iuch",
+      "L\u00f9na",
+      "Sult",
+      "D\u00e0mh",
+      "Samh",
+      "D\u00f9bh"
+    ],
+    "STANDALONEMONTH": [
+      "Am Faoilleach",
+      "An Gearran",
+      "Am M\u00e0rt",
+      "An Giblean",
+      "An C\u00e8itean",
+      "An t-\u00d2gmhios",
+      "An t-Iuchar",
+      "An L\u00f9nastal",
+      "An t-Sultain",
+      "An D\u00e0mhair",
+      "An t-Samhain",
+      "An D\u00f9bhlachd"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d'mh' MMMM y",
+    "longDate": "d'mh' MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gd-gb",
+  "localeID": "gd_GB",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd.js
new file mode 100644
index 0000000..e44083e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gd.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "m",
+      "f"
+    ],
+    "DAY": [
+      "DiD\u00f2mhnaich",
+      "DiLuain",
+      "DiM\u00e0irt",
+      "DiCiadain",
+      "DiarDaoin",
+      "DihAoine",
+      "DiSathairne"
+    ],
+    "ERANAMES": [
+      "Ro Chr\u00ecosta",
+      "An d\u00e8idh Chr\u00ecosta"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "dhen Fhaoilleach",
+      "dhen Ghearran",
+      "dhen Mh\u00e0rt",
+      "dhen Ghiblean",
+      "dhen Ch\u00e8itean",
+      "dhen \u00d2gmhios",
+      "dhen Iuchar",
+      "dhen L\u00f9nastal",
+      "dhen t-Sultain",
+      "dhen D\u00e0mhair",
+      "dhen t-Samhain",
+      "dhen D\u00f9bhlachd"
+    ],
+    "SHORTDAY": [
+      "DiD",
+      "DiL",
+      "DiM",
+      "DiC",
+      "Dia",
+      "Dih",
+      "DiS"
+    ],
+    "SHORTMONTH": [
+      "Faoi",
+      "Gearr",
+      "M\u00e0rt",
+      "Gibl",
+      "C\u00e8it",
+      "\u00d2gmh",
+      "Iuch",
+      "L\u00f9na",
+      "Sult",
+      "D\u00e0mh",
+      "Samh",
+      "D\u00f9bh"
+    ],
+    "STANDALONEMONTH": [
+      "Am Faoilleach",
+      "An Gearran",
+      "Am M\u00e0rt",
+      "An Giblean",
+      "An C\u00e8itean",
+      "An t-\u00d2gmhios",
+      "An t-Iuchar",
+      "An L\u00f9nastal",
+      "An t-Sultain",
+      "An D\u00e0mhair",
+      "An t-Samhain",
+      "An D\u00f9bhlachd"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d'mh' MMMM y",
+    "longDate": "d'mh' MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gd",
+  "localeID": "gd",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[27/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gd.js
new file mode 100644
index 0000000..1afb4c7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gd.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gd",
+  "localeID": "en_GD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gg.js
new file mode 100644
index 0000000..973cbc5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gg",
+  "localeID": "en_GG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gh.js
new file mode 100644
index 0000000..cc33fe0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GHS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gh",
+  "localeID": "en_GH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gi.js
new file mode 100644
index 0000000..97c4823
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gi",
+  "localeID": "en_GI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gm.js
new file mode 100644
index 0000000..e982df3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GMD",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gm",
+  "localeID": "en_GM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gu.js
new file mode 100644
index 0000000..d11933b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gu",
+  "localeID": "en_GU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gy.js
new file mode 100644
index 0000000..d3d543e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-gy.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-gy",
+  "localeID": "en_GY",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-hk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-hk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-hk.js
new file mode 100644
index 0000000..f366c1a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-hk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/y h:mm a",
+    "shortDate": "d/M/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-hk",
+  "localeID": "en_HK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ie.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ie.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ie.js
new file mode 100644
index 0000000..9c79dd4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ie.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ie",
+  "localeID": "en_IE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-im.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-im.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-im.js
new file mode 100644
index 0000000..c81583b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-im.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-im",
+  "localeID": "en_IM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-in.js
new file mode 100644
index 0000000..617f6bf
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-in.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-in",
+  "localeID": "en_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-io.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-io.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-io.js
new file mode 100644
index 0000000..6925279
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-io.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-io",
+  "localeID": "en_IO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-iso.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-iso.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-iso.js
new file mode 100644
index 0000000..a297093
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-iso.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yyyy-MM-dd HH:mm",
+    "shortDate": "yyyy-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-iso",
+  "localeID": "en_ISO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-je.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-je.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-je.js
new file mode 100644
index 0000000..1186c5c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-je.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-je",
+  "localeID": "en_JE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-jm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-jm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-jm.js
new file mode 100644
index 0000000..174002b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-jm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-jm",
+  "localeID": "en_JM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ke.js
new file mode 100644
index 0000000..3af38b4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ke",
+  "localeID": "en_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ki.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ki.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ki.js
new file mode 100644
index 0000000..2fe2ef3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ki.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ki",
+  "localeID": "en_KI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-kn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-kn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-kn.js
new file mode 100644
index 0000000..09101c9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-kn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-kn",
+  "localeID": "en_KN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ky.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ky.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ky.js
new file mode 100644
index 0000000..1d7d454
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ky.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ky",
+  "localeID": "en_KY",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lc.js
new file mode 100644
index 0000000..5a82bd0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lc.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-lc",
+  "localeID": "en_LC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lr.js
new file mode 100644
index 0000000..ade846b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-lr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-lr",
+  "localeID": "en_LR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ls.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ls.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ls.js
new file mode 100644
index 0000000..cd8e927
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ls.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ls",
+  "localeID": "en_LS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mg.js
new file mode 100644
index 0000000..23a37d8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ar",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-mg",
+  "localeID": "en_MG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mh.js
new file mode 100644
index 0000000..8c068a5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-mh",
+  "localeID": "en_MH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[24/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo.js
new file mode 100644
index 0000000..7ca8ade
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "atm",
+      "ptm"
+    ],
+    "DAY": [
+      "diman\u0109o",
+      "lundo",
+      "mardo",
+      "merkredo",
+      "\u0135a\u016ddo",
+      "vendredo",
+      "sabato"
+    ],
+    "ERANAMES": [
+      "aK",
+      "pK"
+    ],
+    "ERAS": [
+      "aK",
+      "pK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januaro",
+      "februaro",
+      "marto",
+      "aprilo",
+      "majo",
+      "junio",
+      "julio",
+      "a\u016dgusto",
+      "septembro",
+      "oktobro",
+      "novembro",
+      "decembro"
+    ],
+    "SHORTDAY": [
+      "di",
+      "lu",
+      "ma",
+      "me",
+      "\u0135a",
+      "ve",
+      "sa"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "a\u016dg",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januaro",
+      "februaro",
+      "marto",
+      "aprilo",
+      "majo",
+      "junio",
+      "julio",
+      "a\u016dgusto",
+      "septembro",
+      "oktobro",
+      "novembro",
+      "decembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d-'a' 'de' MMMM y",
+    "longDate": "y-MMMM-dd",
+    "medium": "y-MMM-dd HH:mm:ss",
+    "mediumDate": "y-MMM-dd",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy-MM-dd HH:mm",
+    "shortDate": "yy-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "eo",
+  "localeID": "eo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-419.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-419.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-419.js
new file mode 100644
index 0000000..ed247e7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-419.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-419",
+  "localeID": "es_419",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ar.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ar.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ar.js
new file mode 100644
index 0000000..55b28c9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ar.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-ar",
+  "localeID": "es_AR",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-bo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-bo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-bo.js
new file mode 100644
index 0000000..27bb951
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-bo.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Bs",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-bo",
+  "localeID": "es_BO",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cl.js
new file mode 100644
index 0000000..f253f6f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd-MM-y h:mm:ss a",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd-MM-yy h:mm a",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-cl",
+  "localeID": "es_CL",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-co.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-co.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-co.js
new file mode 100644
index 0000000..740be11
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-co.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d/MM/y h:mm:ss a",
+    "mediumDate": "d/MM/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-co",
+  "localeID": "es_CO",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cr.js
new file mode 100644
index 0000000..2e0920b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a1",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-cr",
+  "localeID": "es_CR",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cu.js
new file mode 100644
index 0000000..c2323a9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-cu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-cu",
+  "localeID": "es_CU",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-do.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-do.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-do.js
new file mode 100644
index 0000000..d2a7985
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-do.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-do",
+  "localeID": "es_DO",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ea.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ea.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ea.js
new file mode 100644
index 0000000..59fb667
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ea.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "es-ea",
+  "localeID": "es_EA",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ec.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ec.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ec.js
new file mode 100644
index 0000000..0659051
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ec.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-ec",
+  "localeID": "es_EC",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-es.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-es.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-es.js
new file mode 100644
index 0000000..454bbd6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-es.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "es-es",
+  "localeID": "es_ES",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gq.js
new file mode 100644
index 0000000..a21f08a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gq.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-gq",
+  "localeID": "es_GQ",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gt.js
new file mode 100644
index 0000000..69e65c1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-gt.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d/MM/y h:mm:ss a",
+    "mediumDate": "d/MM/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Q",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-gt",
+  "localeID": "es_GT",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-hn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-hn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-hn.js
new file mode 100644
index 0000000..6b88ccc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-hn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd 'de' MMMM 'de' y",
+    "longDate": "dd 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "L",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-hn",
+  "localeID": "es_HN",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ic.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ic.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ic.js
new file mode 100644
index 0000000..0b665f0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ic.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "es-ic",
+  "localeID": "es_IC",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-mx.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-mx.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-mx.js
new file mode 100644
index 0000000..508c949
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-mx.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene",
+      "feb",
+      "mar",
+      "abr",
+      "may",
+      "jun",
+      "jul",
+      "ago",
+      "sep",
+      "oct",
+      "nov",
+      "dic"
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y h:mm:ss a",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-mx",
+  "localeID": "es_MX",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ni.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ni.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ni.js
new file mode 100644
index 0000000..2e05e6c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ni.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "C$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-ni",
+  "localeID": "es_NI",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pa.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pa.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pa.js
new file mode 100644
index 0000000..d633bdd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pa.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "MM/dd/y h:mm:ss a",
+    "mediumDate": "MM/dd/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "MM/dd/yy h:mm a",
+    "shortDate": "MM/dd/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "B/.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-pa",
+  "localeID": "es_PA",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pe.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pe.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pe.js
new file mode 100644
index 0000000..bf10aba
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pe.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "setiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "set.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Setiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "S/.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-pe",
+  "localeID": "es_PE",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ph.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ph.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ph.js
new file mode 100644
index 0000000..23ad6dc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ph.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b1",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "es-ph",
+  "localeID": "es_PH",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pr.js
new file mode 100644
index 0000000..bb4f7b8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-pr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "MM/dd/y h:mm:ss a",
+    "mediumDate": "MM/dd/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "MM/dd/yy h:mm a",
+    "shortDate": "MM/dd/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-pr",
+  "localeID": "es_PR",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-py.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-py.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-py.js
new file mode 100644
index 0000000..4f93e84
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-py.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Gs",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-py",
+  "localeID": "es_PY",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-sv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-sv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-sv.js
new file mode 100644
index 0000000..c914056
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-sv.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-sv",
+  "localeID": "es_SV",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-us.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-us.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-us.js
new file mode 100644
index 0000000..8af9e0a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-us.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-us",
+  "localeID": "es_US",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-uy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-uy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-uy.js
new file mode 100644
index 0000000..0aea1b7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-uy.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "setiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "set.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Setiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-uy",
+  "localeID": "es_UY",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ve.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ve.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ve.js
new file mode 100644
index 0000000..f53ce5f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es-ve.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Bs",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "es-ve",
+  "localeID": "es_VE",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[12/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl.js
new file mode 100644
index 0000000..4f6311b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nl",
+  "localeID": "nl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg-cm.js
new file mode 100644
index 0000000..518ef7c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "man\u00e1",
+      "kug\u00fa"
+    ],
+    "DAY": [
+      "s\u0254\u0301nd\u0254",
+      "m\u0254\u0301nd\u0254",
+      "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1ba",
+      "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1lal",
+      "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1na",
+      "mab\u00e1g\u00e1 m\u00e1 sukul",
+      "s\u00e1sadi"
+    ],
+    "ERANAMES": [
+      "B\u00f3 Lahl\u025b\u0304",
+      "Pfi\u025b Bur\u012b"
+    ],
+    "ERAS": [
+      "BL",
+      "PB"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ngw\u025bn mat\u00e1hra",
+      "ngw\u025bn \u0144mba",
+      "ngw\u025bn \u0144lal",
+      "ngw\u025bn \u0144na",
+      "ngw\u025bn \u0144tan",
+      "ngw\u025bn \u0144tu\u00f3",
+      "ngw\u025bn h\u025bmbu\u025br\u00ed",
+      "ngw\u025bn l\u0254mbi",
+      "ngw\u025bn r\u025bbvu\u00e2",
+      "ngw\u025bn wum",
+      "ngw\u025bn wum nav\u01d4r",
+      "kr\u00edsimin"
+    ],
+    "SHORTDAY": [
+      "s\u0254\u0301n",
+      "m\u0254\u0301n",
+      "smb",
+      "sml",
+      "smn",
+      "mbs",
+      "sas"
+    ],
+    "SHORTMONTH": [
+      "ng1",
+      "ng2",
+      "ng3",
+      "ng4",
+      "ng5",
+      "ng6",
+      "ng7",
+      "ng8",
+      "ng9",
+      "ng10",
+      "ng11",
+      "kris"
+    ],
+    "STANDALONEMONTH": [
+      "ngw\u025bn mat\u00e1hra",
+      "ngw\u025bn \u0144mba",
+      "ngw\u025bn \u0144lal",
+      "ngw\u025bn \u0144na",
+      "ngw\u025bn \u0144tan",
+      "ngw\u025bn \u0144tu\u00f3",
+      "ngw\u025bn h\u025bmbu\u025br\u00ed",
+      "ngw\u025bn l\u0254mbi",
+      "ngw\u025bn r\u025bbvu\u00e2",
+      "ngw\u025bn wum",
+      "ngw\u025bn wum nav\u01d4r",
+      "kr\u00edsimin"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "nmg-cm",
+  "localeID": "nmg_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg.js
new file mode 100644
index 0000000..2545725
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nmg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "man\u00e1",
+      "kug\u00fa"
+    ],
+    "DAY": [
+      "s\u0254\u0301nd\u0254",
+      "m\u0254\u0301nd\u0254",
+      "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1ba",
+      "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1lal",
+      "s\u0254\u0301nd\u0254 maf\u00fa m\u00e1na",
+      "mab\u00e1g\u00e1 m\u00e1 sukul",
+      "s\u00e1sadi"
+    ],
+    "ERANAMES": [
+      "B\u00f3 Lahl\u025b\u0304",
+      "Pfi\u025b Bur\u012b"
+    ],
+    "ERAS": [
+      "BL",
+      "PB"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ngw\u025bn mat\u00e1hra",
+      "ngw\u025bn \u0144mba",
+      "ngw\u025bn \u0144lal",
+      "ngw\u025bn \u0144na",
+      "ngw\u025bn \u0144tan",
+      "ngw\u025bn \u0144tu\u00f3",
+      "ngw\u025bn h\u025bmbu\u025br\u00ed",
+      "ngw\u025bn l\u0254mbi",
+      "ngw\u025bn r\u025bbvu\u00e2",
+      "ngw\u025bn wum",
+      "ngw\u025bn wum nav\u01d4r",
+      "kr\u00edsimin"
+    ],
+    "SHORTDAY": [
+      "s\u0254\u0301n",
+      "m\u0254\u0301n",
+      "smb",
+      "sml",
+      "smn",
+      "mbs",
+      "sas"
+    ],
+    "SHORTMONTH": [
+      "ng1",
+      "ng2",
+      "ng3",
+      "ng4",
+      "ng5",
+      "ng6",
+      "ng7",
+      "ng8",
+      "ng9",
+      "ng10",
+      "ng11",
+      "kris"
+    ],
+    "STANDALONEMONTH": [
+      "ngw\u025bn mat\u00e1hra",
+      "ngw\u025bn \u0144mba",
+      "ngw\u025bn \u0144lal",
+      "ngw\u025bn \u0144na",
+      "ngw\u025bn \u0144tan",
+      "ngw\u025bn \u0144tu\u00f3",
+      "ngw\u025bn h\u025bmbu\u025br\u00ed",
+      "ngw\u025bn l\u0254mbi",
+      "ngw\u025bn r\u025bbvu\u00e2",
+      "ngw\u025bn wum",
+      "ngw\u025bn wum nav\u01d4r",
+      "kr\u00edsimin"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "nmg",
+  "localeID": "nmg",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn-no.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn-no.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn-no.js
new file mode 100644
index 0000000..15370bc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn-no.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "formiddag",
+      "ettermiddag"
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "m\u00e5ndag",
+      "tysdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "laurdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "s\u00f8.",
+      "m\u00e5.",
+      "ty.",
+      "on.",
+      "to.",
+      "fr.",
+      "la."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mars",
+      "apr.",
+      "mai",
+      "juni",
+      "juli",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y HH:mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "nn-no",
+  "localeID": "nn_NO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn.js
new file mode 100644
index 0000000..2ca6886
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "formiddag",
+      "ettermiddag"
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "m\u00e5ndag",
+      "tysdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "laurdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "s\u00f8.",
+      "m\u00e5.",
+      "ty.",
+      "on.",
+      "to.",
+      "fr.",
+      "la."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mars",
+      "apr.",
+      "mai",
+      "juni",
+      "juli",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y HH:mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "nn",
+  "localeID": "nn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh-cm.js
new file mode 100644
index 0000000..549ae5b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "mba\u02bc\u00e1mba\u02bc",
+      "ncw\u00f2nz\u00e9m"
+    ],
+    "DAY": [
+      "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8",
+      "mvf\u00f2 ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc",
+      "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc",
+      "m\u00e0ga ly\u025b\u030c\u02bc"
+    ],
+    "ERANAMES": [
+      "m\u00e9 zy\u00e9 Y\u011bs\u00f4",
+      "m\u00e9 g\u00ffo \u0144zy\u00e9 Y\u011bs\u00f4"
+    ],
+    "ERAS": [
+      "m.z.Y.",
+      "m.g.n.Y."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "sa\u014b tsets\u025b\u0300\u025b l\u00f9m",
+      "sa\u014b k\u00e0g ngw\u00f3\u014b",
+      "sa\u014b lepy\u00e8 sh\u00fam",
+      "sa\u014b c\u00ff\u00f3",
+      "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3",
+      "sa\u014b nj\u00ffol\u00e1\u02bc",
+      "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300",
+      "sa\u014b mb\u0289\u0300\u014b",
+      "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b",
+      "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc",
+      "sa\u014b mejwo\u014b\u00f3",
+      "sa\u014b l\u00f9m"
+    ],
+    "SHORTDAY": [
+      "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8",
+      "mvf\u00f2 ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc",
+      "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc",
+      "m\u00e0ga ly\u025b\u030c\u02bc"
+    ],
+    "SHORTMONTH": [
+      "sa\u014b tsets\u025b\u0300\u025b l\u00f9m",
+      "sa\u014b k\u00e0g ngw\u00f3\u014b",
+      "sa\u014b lepy\u00e8 sh\u00fam",
+      "sa\u014b c\u00ff\u00f3",
+      "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3",
+      "sa\u014b nj\u00ffol\u00e1\u02bc",
+      "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300",
+      "sa\u014b mb\u0289\u0300\u014b",
+      "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b",
+      "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc",
+      "sa\u014b mejwo\u014b\u00f3",
+      "sa\u014b l\u00f9m"
+    ],
+    "STANDALONEMONTH": [
+      "sa\u014b tsets\u025b\u0300\u025b l\u00f9m",
+      "sa\u014b k\u00e0g ngw\u00f3\u014b",
+      "sa\u014b lepy\u00e8 sh\u00fam",
+      "sa\u014b c\u00ff\u00f3",
+      "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3",
+      "sa\u014b nj\u00ffol\u00e1\u02bc",
+      "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300",
+      "sa\u014b mb\u0289\u0300\u014b",
+      "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b",
+      "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc",
+      "sa\u014b mejwo\u014b\u00f3",
+      "sa\u014b l\u00f9m"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE , 'ly\u025b'\u030c\u02bc d 'na' MMMM, y",
+    "longDate": "'ly\u025b'\u030c\u02bc d 'na' MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nnh-cm",
+  "localeID": "nnh_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh.js
new file mode 100644
index 0000000..6552c81
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nnh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "mba\u02bc\u00e1mba\u02bc",
+      "ncw\u00f2nz\u00e9m"
+    ],
+    "DAY": [
+      "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8",
+      "mvf\u00f2 ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc",
+      "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc",
+      "m\u00e0ga ly\u025b\u030c\u02bc"
+    ],
+    "ERANAMES": [
+      "m\u00e9 zy\u00e9 Y\u011bs\u00f4",
+      "m\u00e9 g\u00ffo \u0144zy\u00e9 Y\u011bs\u00f4"
+    ],
+    "ERAS": [
+      "m.z.Y.",
+      "m.g.n.Y."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "sa\u014b tsets\u025b\u0300\u025b l\u00f9m",
+      "sa\u014b k\u00e0g ngw\u00f3\u014b",
+      "sa\u014b lepy\u00e8 sh\u00fam",
+      "sa\u014b c\u00ff\u00f3",
+      "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3",
+      "sa\u014b nj\u00ffol\u00e1\u02bc",
+      "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300",
+      "sa\u014b mb\u0289\u0300\u014b",
+      "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b",
+      "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc",
+      "sa\u014b mejwo\u014b\u00f3",
+      "sa\u014b l\u00f9m"
+    ],
+    "SHORTDAY": [
+      "ly\u025b\u02bc\u025b\u0301 s\u1e85\u00ed\u014bt\u00e8",
+      "mvf\u00f2 ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 mvf\u00f2 ly\u025b\u030c\u02bc",
+      "ts\u00e8ts\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mb\u0254\u0301\u0254nt\u00e8 tsets\u025b\u0300\u025b ly\u025b\u030c\u02bc",
+      "mvf\u00f2 m\u00e0ga ly\u025b\u030c\u02bc",
+      "m\u00e0ga ly\u025b\u030c\u02bc"
+    ],
+    "SHORTMONTH": [
+      "sa\u014b tsets\u025b\u0300\u025b l\u00f9m",
+      "sa\u014b k\u00e0g ngw\u00f3\u014b",
+      "sa\u014b lepy\u00e8 sh\u00fam",
+      "sa\u014b c\u00ff\u00f3",
+      "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3",
+      "sa\u014b nj\u00ffol\u00e1\u02bc",
+      "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300",
+      "sa\u014b mb\u0289\u0300\u014b",
+      "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b",
+      "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc",
+      "sa\u014b mejwo\u014b\u00f3",
+      "sa\u014b l\u00f9m"
+    ],
+    "STANDALONEMONTH": [
+      "sa\u014b tsets\u025b\u0300\u025b l\u00f9m",
+      "sa\u014b k\u00e0g ngw\u00f3\u014b",
+      "sa\u014b lepy\u00e8 sh\u00fam",
+      "sa\u014b c\u00ff\u00f3",
+      "sa\u014b ts\u025b\u0300\u025b c\u00ff\u00f3",
+      "sa\u014b nj\u00ffol\u00e1\u02bc",
+      "sa\u014b ty\u025b\u0300b ty\u025b\u0300b mb\u0289\u0300",
+      "sa\u014b mb\u0289\u0300\u014b",
+      "sa\u014b ngw\u0254\u0300\u02bc mb\u00ff\u025b",
+      "sa\u014b t\u00e0\u014ba tsets\u00e1\u02bc",
+      "sa\u014b mejwo\u014b\u00f3",
+      "sa\u014b l\u00f9m"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE , 'ly\u025b'\u030c\u02bc d 'na' MMMM, y",
+    "longDate": "'ly\u025b'\u030c\u02bc d 'na' MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nnh",
+  "localeID": "nnh",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no-no.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no-no.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no-no.js
new file mode 100644
index 0000000..89e161d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no-no.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd.MM.y HH.mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "no-no",
+  "localeID": "no_NO",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no.js
new file mode 100644
index 0000000..d9dd6a3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_no.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd.MM.y HH.mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "no",
+  "localeID": "no",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr-za.js
new file mode 100644
index 0000000..60a2745
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr-za.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "uSonto",
+      "uMvulo",
+      "uLesibili",
+      "Lesithathu",
+      "uLesine",
+      "ngoLesihlanu",
+      "umGqibelo"
+    ],
+    "ERANAMES": [
+      "BC",
+      "AD"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Janabari",
+      "uFeberbari",
+      "uMatjhi",
+      "u-Apreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Arhostosi",
+      "Septemba",
+      "Oktoba",
+      "Usinyikhaba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mvu",
+      "Bil",
+      "Tha",
+      "Ne",
+      "Hla",
+      "Gqi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mat",
+      "Apr",
+      "Mey",
+      "Jun",
+      "Jul",
+      "Arh",
+      "Sep",
+      "Okt",
+      "Usi",
+      "Dis"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nr-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr.js
new file mode 100644
index 0000000..daa76c0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nr.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "uSonto",
+      "uMvulo",
+      "uLesibili",
+      "Lesithathu",
+      "uLesine",
+      "ngoLesihlanu",
+      "umGqibelo"
+    ],
+    "ERANAMES": [
+      "BC",
+      "AD"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Janabari",
+      "uFeberbari",
+      "uMatjhi",
+      "u-Apreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Arhostosi",
+      "Septemba",
+      "Oktoba",
+      "Usinyikhaba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mvu",
+      "Bil",
+      "Tha",
+      "Ne",
+      "Hla",
+      "Gqi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mat",
+      "Apr",
+      "Mey",
+      "Jun",
+      "Jul",
+      "Arh",
+      "Sep",
+      "Okt",
+      "Usi",
+      "Dis"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nr",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso-za.js
new file mode 100644
index 0000000..493ec38
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso-za.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sontaga",
+      "Mosupalogo",
+      "Labobedi",
+      "Laboraro",
+      "Labone",
+      "Labohlano",
+      "Mokibelo"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Janaware",
+      "Feberware",
+      "Mat\u0161he",
+      "Aporele",
+      "Mei",
+      "June",
+      "Julae",
+      "Agostose",
+      "Setemere",
+      "Oktobore",
+      "Nofemere",
+      "Disemere"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mos",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Hla",
+      "Mok"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mat",
+      "Apo",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Set",
+      "Okt",
+      "Nof",
+      "Dis"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nso-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso.js
new file mode 100644
index 0000000..50d5663
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nso.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sontaga",
+      "Mosupalogo",
+      "Labobedi",
+      "Laboraro",
+      "Labone",
+      "Labohlano",
+      "Mokibelo"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Janaware",
+      "Feberware",
+      "Mat\u0161he",
+      "Aporele",
+      "Mei",
+      "June",
+      "Julae",
+      "Agostose",
+      "Setemere",
+      "Oktobore",
+      "Nofemere",
+      "Disemere"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mos",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Hla",
+      "Mok"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mat",
+      "Apo",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Set",
+      "Okt",
+      "Nof",
+      "Dis"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nso",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus-sd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus-sd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus-sd.js
new file mode 100644
index 0000000..4c19d63
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus-sd.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "RW",
+      "T\u014a"
+    ],
+    "DAY": [
+      "C\u00e4\u014b ku\u0254th",
+      "Jiec la\u0331t",
+      "R\u025bw l\u00e4tni",
+      "Di\u0254\u0331k l\u00e4tni",
+      "\u014auaan l\u00e4tni",
+      "Dhieec l\u00e4tni",
+      "B\u00e4k\u025bl l\u00e4tni"
+    ],
+    "ERANAMES": [
+      "A ka\u0331n Yecu ni dap",
+      "\u0190 ca Yecu dap"
+    ],
+    "ERAS": [
+      "AY",
+      "\u0190Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Tiop thar p\u025bt",
+      "P\u025bt",
+      "Du\u0254\u0331\u0254\u0331\u014b",
+      "Guak",
+      "Du\u00e4t",
+      "Kornyoot",
+      "Pay yie\u0331tni",
+      "Tho\u0331o\u0331r",
+      "T\u025b\u025br",
+      "Laath",
+      "Kur",
+      "Tio\u0331p in di\u0331i\u0331t"
+    ],
+    "SHORTDAY": [
+      "C\u00e4\u014b",
+      "Jiec",
+      "R\u025bw",
+      "Di\u0254\u0331k",
+      "\u014auaan",
+      "Dhieec",
+      "B\u00e4k\u025bl"
+    ],
+    "SHORTMONTH": [
+      "Tiop",
+      "P\u025bt",
+      "Du\u0254\u0331\u0254\u0331",
+      "Guak",
+      "Du\u00e4",
+      "Kor",
+      "Pay",
+      "Thoo",
+      "T\u025b\u025b",
+      "Laa",
+      "Kur",
+      "Tid"
+    ],
+    "STANDALONEMONTH": [
+      "Tiop thar p\u025bt",
+      "P\u025bt",
+      "Du\u0254\u0331\u0254\u0331\u014b",
+      "Guak",
+      "Du\u00e4t",
+      "Kornyoot",
+      "Pay yie\u0331tni",
+      "Tho\u0331o\u0331r",
+      "T\u025b\u025br",
+      "Laath",
+      "Kur",
+      "Tio\u0331p in di\u0331i\u0331t"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/y h:mm a",
+    "shortDate": "d/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SDG",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nus-sd",
+  "localeID": "nus_SD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus.js
new file mode 100644
index 0000000..24c8efd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nus.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "RW",
+      "T\u014a"
+    ],
+    "DAY": [
+      "C\u00e4\u014b ku\u0254th",
+      "Jiec la\u0331t",
+      "R\u025bw l\u00e4tni",
+      "Di\u0254\u0331k l\u00e4tni",
+      "\u014auaan l\u00e4tni",
+      "Dhieec l\u00e4tni",
+      "B\u00e4k\u025bl l\u00e4tni"
+    ],
+    "ERANAMES": [
+      "A ka\u0331n Yecu ni dap",
+      "\u0190 ca Yecu dap"
+    ],
+    "ERAS": [
+      "AY",
+      "\u0190Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Tiop thar p\u025bt",
+      "P\u025bt",
+      "Du\u0254\u0331\u0254\u0331\u014b",
+      "Guak",
+      "Du\u00e4t",
+      "Kornyoot",
+      "Pay yie\u0331tni",
+      "Tho\u0331o\u0331r",
+      "T\u025b\u025br",
+      "Laath",
+      "Kur",
+      "Tio\u0331p in di\u0331i\u0331t"
+    ],
+    "SHORTDAY": [
+      "C\u00e4\u014b",
+      "Jiec",
+      "R\u025bw",
+      "Di\u0254\u0331k",
+      "\u014auaan",
+      "Dhieec",
+      "B\u00e4k\u025bl"
+    ],
+    "SHORTMONTH": [
+      "Tiop",
+      "P\u025bt",
+      "Du\u0254\u0331\u0254\u0331",
+      "Guak",
+      "Du\u00e4",
+      "Kor",
+      "Pay",
+      "Thoo",
+      "T\u025b\u025b",
+      "Laa",
+      "Kur",
+      "Tid"
+    ],
+    "STANDALONEMONTH": [
+      "Tiop thar p\u025bt",
+      "P\u025bt",
+      "Du\u0254\u0331\u0254\u0331\u014b",
+      "Guak",
+      "Du\u00e4t",
+      "Kornyoot",
+      "Pay yie\u0331tni",
+      "Tho\u0331o\u0331r",
+      "T\u025b\u025br",
+      "Laath",
+      "Kur",
+      "Tio\u0331p in di\u0331i\u0331t"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/y h:mm a",
+    "shortDate": "d/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SDG",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nus",
+  "localeID": "nus",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn-ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn-ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn-ug.js
new file mode 100644
index 0000000..0d02342
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn-ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sande",
+      "Orwokubanza",
+      "Orwakabiri",
+      "Orwakashatu",
+      "Orwakana",
+      "Orwakataano",
+      "Orwamukaaga"
+    ],
+    "ERANAMES": [
+      "Kurisito Atakaijire",
+      "Kurisito Yaijire"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "SHORTDAY": [
+      "SAN",
+      "ORK",
+      "OKB",
+      "OKS",
+      "OKN",
+      "OKT",
+      "OMK"
+    ],
+    "SHORTMONTH": [
+      "KBZ",
+      "KBR",
+      "KST",
+      "KKN",
+      "KTN",
+      "KMK",
+      "KMS",
+      "KMN",
+      "KMW",
+      "KKM",
+      "KNK",
+      "KNB"
+    ],
+    "STANDALONEMONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nyn-ug",
+  "localeID": "nyn_UG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn.js
new file mode 100644
index 0000000..ffeed08
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nyn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sande",
+      "Orwokubanza",
+      "Orwakabiri",
+      "Orwakashatu",
+      "Orwakana",
+      "Orwakataano",
+      "Orwamukaaga"
+    ],
+    "ERANAMES": [
+      "Kurisito Atakaijire",
+      "Kurisito Yaijire"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "SHORTDAY": [
+      "SAN",
+      "ORK",
+      "OKB",
+      "OKS",
+      "OKN",
+      "OKT",
+      "OMK"
+    ],
+    "SHORTMONTH": [
+      "KBZ",
+      "KBR",
+      "KST",
+      "KKN",
+      "KTN",
+      "KMK",
+      "KMS",
+      "KMN",
+      "KMW",
+      "KKM",
+      "KNK",
+      "KNB"
+    ],
+    "STANDALONEMONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nyn",
+  "localeID": "nyn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-et.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-et.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-et.js
new file mode 100644
index 0000000..83ab18d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-et.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "WD",
+      "WB"
+    ],
+    "DAY": [
+      "Dilbata",
+      "Wiixata",
+      "Qibxata",
+      "Roobii",
+      "Kamiisa",
+      "Jimaata",
+      "Sanbata"
+    ],
+    "ERANAMES": [
+      "KD",
+      "KB"
+    ],
+    "ERAS": [
+      "KD",
+      "KB"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Amajjii",
+      "Guraandhala",
+      "Bitooteessa",
+      "Elba",
+      "Caamsa",
+      "Waxabajjii",
+      "Adooleessa",
+      "Hagayya",
+      "Fuulbana",
+      "Onkololeessa",
+      "Sadaasa",
+      "Muddee"
+    ],
+    "SHORTDAY": [
+      "Dil",
+      "Wix",
+      "Qib",
+      "Rob",
+      "Kam",
+      "Jim",
+      "San"
+    ],
+    "SHORTMONTH": [
+      "Ama",
+      "Gur",
+      "Bit",
+      "Elb",
+      "Cam",
+      "Wax",
+      "Ado",
+      "Hag",
+      "Ful",
+      "Onk",
+      "Sad",
+      "Mud"
+    ],
+    "STANDALONEMONTH": [
+      "Amajjii",
+      "Guraandhala",
+      "Bitooteessa",
+      "Elba",
+      "Caamsa",
+      "Waxabajjii",
+      "Adooleessa",
+      "Hagayya",
+      "Fuulbana",
+      "Onkololeessa",
+      "Sadaasa",
+      "Muddee"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "om-et",
+  "localeID": "om_ET",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-ke.js
new file mode 100644
index 0000000..0d74a9a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "WD",
+      "WB"
+    ],
+    "DAY": [
+      "Dilbata",
+      "Wiixata",
+      "Qibxata",
+      "Roobii",
+      "Kamiisa",
+      "Jimaata",
+      "Sanbata"
+    ],
+    "ERANAMES": [
+      "KD",
+      "KB"
+    ],
+    "ERAS": [
+      "KD",
+      "KB"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Amajjii",
+      "Guraandhala",
+      "Bitooteessa",
+      "Elba",
+      "Caamsa",
+      "Waxabajjii",
+      "Adooleessa",
+      "Hagayya",
+      "Fuulbana",
+      "Onkololeessa",
+      "Sadaasa",
+      "Muddee"
+    ],
+    "SHORTDAY": [
+      "Dil",
+      "Wix",
+      "Qib",
+      "Rob",
+      "Kam",
+      "Jim",
+      "San"
+    ],
+    "SHORTMONTH": [
+      "Ama",
+      "Gur",
+      "Bit",
+      "Elb",
+      "Cam",
+      "Wax",
+      "Ado",
+      "Hag",
+      "Ful",
+      "Onk",
+      "Sad",
+      "Mud"
+    ],
+    "STANDALONEMONTH": [
+      "Amajjii",
+      "Guraandhala",
+      "Bitooteessa",
+      "Elba",
+      "Caamsa",
+      "Waxabajjii",
+      "Adooleessa",
+      "Hagayya",
+      "Fuulbana",
+      "Onkololeessa",
+      "Sadaasa",
+      "Muddee"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "om-ke",
+  "localeID": "om_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om.js
new file mode 100644
index 0000000..4608387
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_om.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "WD",
+      "WB"
+    ],
+    "DAY": [
+      "Dilbata",
+      "Wiixata",
+      "Qibxata",
+      "Roobii",
+      "Kamiisa",
+      "Jimaata",
+      "Sanbata"
+    ],
+    "ERANAMES": [
+      "KD",
+      "KB"
+    ],
+    "ERAS": [
+      "KD",
+      "KB"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Amajjii",
+      "Guraandhala",
+      "Bitooteessa",
+      "Elba",
+      "Caamsa",
+      "Waxabajjii",
+      "Adooleessa",
+      "Hagayya",
+      "Fuulbana",
+      "Onkololeessa",
+      "Sadaasa",
+      "Muddee"
+    ],
+    "SHORTDAY": [
+      "Dil",
+      "Wix",
+      "Qib",
+      "Rob",
+      "Kam",
+      "Jim",
+      "San"
+    ],
+    "SHORTMONTH": [
+      "Ama",
+      "Gur",
+      "Bit",
+      "Elb",
+      "Cam",
+      "Wax",
+      "Ado",
+      "Hag",
+      "Ful",
+      "Onk",
+      "Sad",
+      "Mud"
+    ],
+    "STANDALONEMONTH": [
+      "Amajjii",
+      "Guraandhala",
+      "Bitooteessa",
+      "Elba",
+      "Caamsa",
+      "Waxabajjii",
+      "Adooleessa",
+      "Hagayya",
+      "Fuulbana",
+      "Onkololeessa",
+      "Sadaasa",
+      "Muddee"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "om",
+  "localeID": "om",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or-in.js
new file mode 100644
index 0000000..1e56090
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30",
+      "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30",
+      "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30",
+      "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30",
+      "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30",
+      "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30",
+      "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+      "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40",
+      "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+      "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+      "\u0b2e\u0b07",
+      "\u0b1c\u0b41\u0b28",
+      "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+      "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+      "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+      "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+    ],
+    "SHORTDAY": [
+      "\u0b30\u0b2c\u0b3f",
+      "\u0b38\u0b4b\u0b2e",
+      "\u0b2e\u0b19\u0b4d\u0b17\u0b33",
+      "\u0b2c\u0b41\u0b27",
+      "\u0b17\u0b41\u0b30\u0b41",
+      "\u0b36\u0b41\u0b15\u0b4d\u0b30",
+      "\u0b36\u0b28\u0b3f"
+    ],
+    "SHORTMONTH": [
+      "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+      "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40",
+      "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+      "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+      "\u0b2e\u0b07",
+      "\u0b1c\u0b41\u0b28",
+      "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+      "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+      "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+      "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+    ],
+    "STANDALONEMONTH": [
+      "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+      "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40",
+      "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+      "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+      "\u0b2e\u0b07",
+      "\u0b1c\u0b41\u0b28",
+      "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+      "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+      "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+      "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "or-in",
+  "localeID": "or_IN",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or.js
new file mode 100644
index 0000000..9e46235
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_or.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30",
+      "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30",
+      "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30",
+      "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30",
+      "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30",
+      "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30",
+      "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+      "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40",
+      "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+      "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+      "\u0b2e\u0b07",
+      "\u0b1c\u0b41\u0b28",
+      "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+      "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+      "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+      "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+    ],
+    "SHORTDAY": [
+      "\u0b30\u0b2c\u0b3f",
+      "\u0b38\u0b4b\u0b2e",
+      "\u0b2e\u0b19\u0b4d\u0b17\u0b33",
+      "\u0b2c\u0b41\u0b27",
+      "\u0b17\u0b41\u0b30\u0b41",
+      "\u0b36\u0b41\u0b15\u0b4d\u0b30",
+      "\u0b36\u0b28\u0b3f"
+    ],
+    "SHORTMONTH": [
+      "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+      "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40",
+      "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+      "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+      "\u0b2e\u0b07",
+      "\u0b1c\u0b41\u0b28",
+      "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+      "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+      "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+      "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+    ],
+    "STANDALONEMONTH": [
+      "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+      "\u0b2b\u0b47\u0b2c\u0b43\u0b06\u0b30\u0b40",
+      "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+      "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+      "\u0b2e\u0b07",
+      "\u0b1c\u0b41\u0b28",
+      "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+      "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+      "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+      "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+      "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "or",
+  "localeID": "or",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[44/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.js
new file mode 100644
index 0000000..0d20623
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.js
@@ -0,0 +1,687 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* jshint ignore:start */
+// this code is in the core, but not in angular-messages.js
+var isArray = angular.isArray;
+var forEach = angular.forEach;
+var isString = angular.isString;
+var jqLite = angular.element;
+/* jshint ignore:end */
+
+/**
+ * @ngdoc module
+ * @name ngMessages
+ * @description
+ *
+ * The `ngMessages` module provides enhanced support for displaying messages within templates
+ * (typically within forms or when rendering message objects that return key/value data).
+ * Instead of relying on JavaScript code and/or complex ng-if statements within your form template to
+ * show and hide error messages specific to the state of an input field, the `ngMessages` and
+ * `ngMessage` directives are designed to handle the complexity, inheritance and priority
+ * sequencing based on the order of how the messages are defined in the template.
+ *
+ * Currently, the ngMessages module only contains the code for the `ngMessages`, `ngMessagesInclude`
+ * `ngMessage` and `ngMessageExp` directives.
+ *
+ * # Usage
+ * The `ngMessages` directive listens on a key/value collection which is set on the ngMessages attribute.
+ * Since the {@link ngModel ngModel} directive exposes an `$error` object, this error object can be
+ * used with `ngMessages` to display control error messages in an easier way than with just regular angular
+ * template directives.
+ *
+ * ```html
+ * <form name="myForm">
+ *   <label>
+ *     Enter text:
+ *     <input type="text" ng-model="field" name="myField" required minlength="5" />
+ *   </label>
+ *   <div ng-messages="myForm.myField.$error" role="alert">
+ *     <div ng-message="required">You did not enter a field</div>
+ *     <div ng-message="minlength, maxlength">
+ *       Your email must be between 5 and 100 characters long
+ *     </div>
+ *   </div>
+ * </form>
+ * ```
+ *
+ * Now whatever key/value entries are present within the provided object (in this case `$error`) then
+ * the ngMessages directive will render the inner first ngMessage directive (depending if the key values
+ * match the attribute value present on each ngMessage directive). In other words, if your errors
+ * object contains the following data:
+ *
+ * ```javascript
+ * <!-- keep in mind that ngModel automatically sets these error flags -->
+ * myField.$error = { minlength : true, required : true };
+ * ```
+ *
+ * Then the `required` message will be displayed first. When required is false then the `minlength` message
+ * will be displayed right after (since these messages are ordered this way in the template HTML code).
+ * The prioritization of each message is determined by what order they're present in the DOM.
+ * Therefore, instead of having custom JavaScript code determine the priority of what errors are
+ * present before others, the presentation of the errors are handled within the template.
+ *
+ * By default, ngMessages will only display one error at a time. However, if you wish to display all
+ * messages then the `ng-messages-multiple` attribute flag can be used on the element containing the
+ * ngMessages directive to make this happen.
+ *
+ * ```html
+ * <!-- attribute-style usage -->
+ * <div ng-messages="myForm.myField.$error" ng-messages-multiple>...</div>
+ *
+ * <!-- element-style usage -->
+ * <ng-messages for="myForm.myField.$error" multiple>...</ng-messages>
+ * ```
+ *
+ * ## Reusing and Overriding Messages
+ * In addition to prioritization, ngMessages also allows for including messages from a remote or an inline
+ * template. This allows for generic collection of messages to be reused across multiple parts of an
+ * application.
+ *
+ * ```html
+ * <script type="text/ng-template" id="error-messages">
+ *   <div ng-message="required">This field is required</div>
+ *   <div ng-message="minlength">This field is too short</div>
+ * </script>
+ *
+ * <div ng-messages="myForm.myField.$error" role="alert">
+ *   <div ng-messages-include="error-messages"></div>
+ * </div>
+ * ```
+ *
+ * However, including generic messages may not be useful enough to match all input fields, therefore,
+ * `ngMessages` provides the ability to override messages defined in the remote template by redefining
+ * them within the directive container.
+ *
+ * ```html
+ * <!-- a generic template of error messages known as "my-custom-messages" -->
+ * <script type="text/ng-template" id="my-custom-messages">
+ *   <div ng-message="required">This field is required</div>
+ *   <div ng-message="minlength">This field is too short</div>
+ * </script>
+ *
+ * <form name="myForm">
+ *   <label>
+ *     Email address
+ *     <input type="email"
+ *            id="email"
+ *            name="myEmail"
+ *            ng-model="email"
+ *            minlength="5"
+ *            required />
+ *   </label>
+ *   <!-- any ng-message elements that appear BEFORE the ng-messages-include will
+ *        override the messages present in the ng-messages-include template -->
+ *   <div ng-messages="myForm.myEmail.$error" role="alert">
+ *     <!-- this required message has overridden the template message -->
+ *     <div ng-message="required">You did not enter your email address</div>
+ *
+ *     <!-- this is a brand new message and will appear last in the prioritization -->
+ *     <div ng-message="email">Your email address is invalid</div>
+ *
+ *     <!-- and here are the generic error messages -->
+ *     <div ng-messages-include="my-custom-messages"></div>
+ *   </div>
+ * </form>
+ * ```
+ *
+ * In the example HTML code above the message that is set on required will override the corresponding
+ * required message defined within the remote template. Therefore, with particular input fields (such
+ * email addresses, date fields, autocomplete inputs, etc...), specialized error messages can be applied
+ * while more generic messages can be used to handle other, more general input errors.
+ *
+ * ## Dynamic Messaging
+ * ngMessages also supports using expressions to dynamically change key values. Using arrays and
+ * repeaters to list messages is also supported. This means that the code below will be able to
+ * fully adapt itself and display the appropriate message when any of the expression data changes:
+ *
+ * ```html
+ * <form name="myForm">
+ *   <label>
+ *     Email address
+ *     <input type="email"
+ *            name="myEmail"
+ *            ng-model="email"
+ *            minlength="5"
+ *            required />
+ *   </label>
+ *   <div ng-messages="myForm.myEmail.$error" role="alert">
+ *     <div ng-message="required">You did not enter your email address</div>
+ *     <div ng-repeat="errorMessage in errorMessages">
+ *       <!-- use ng-message-exp for a message whose key is given by an expression -->
+ *       <div ng-message-exp="errorMessage.type">{{ errorMessage.text }}</div>
+ *     </div>
+ *   </div>
+ * </form>
+ * ```
+ *
+ * The `errorMessage.type` expression can be a string value or it can be an array so
+ * that multiple errors can be associated with a single error message:
+ *
+ * ```html
+ *   <label>
+ *     Email address
+ *     <input type="email"
+ *            ng-model="data.email"
+ *            name="myEmail"
+ *            ng-minlength="5"
+ *            ng-maxlength="100"
+ *            required />
+ *   </label>
+ *   <div ng-messages="myForm.myEmail.$error" role="alert">
+ *     <div ng-message-exp="'required'">You did not enter your email address</div>
+ *     <div ng-message-exp="['minlength', 'maxlength']">
+ *       Your email must be between 5 and 100 characters long
+ *     </div>
+ *   </div>
+ * ```
+ *
+ * Feel free to use other structural directives such as ng-if and ng-switch to further control
+ * what messages are active and when. Be careful, if you place ng-message on the same element
+ * as these structural directives, Angular may not be able to determine if a message is active
+ * or not. Therefore it is best to place the ng-message on a child element of the structural
+ * directive.
+ *
+ * ```html
+ * <div ng-messages="myForm.myEmail.$error" role="alert">
+ *   <div ng-if="showRequiredError">
+ *     <div ng-message="required">Please enter something</div>
+ *   </div>
+ * </div>
+ * ```
+ *
+ * ## Animations
+ * If the `ngAnimate` module is active within the application then the `ngMessages`, `ngMessage` and
+ * `ngMessageExp` directives will trigger animations whenever any messages are added and removed from
+ * the DOM by the `ngMessages` directive.
+ *
+ * Whenever the `ngMessages` directive contains one or more visible messages then the `.ng-active` CSS
+ * class will be added to the element. The `.ng-inactive` CSS class will be applied when there are no
+ * messages present. Therefore, CSS transitions and keyframes as well as JavaScript animations can
+ * hook into the animations whenever these classes are added/removed.
+ *
+ * Let's say that our HTML code for our messages container looks like so:
+ *
+ * ```html
+ * <div ng-messages="myMessages" class="my-messages" role="alert">
+ *   <div ng-message="alert" class="some-message">...</div>
+ *   <div ng-message="fail" class="some-message">...</div>
+ * </div>
+ * ```
+ *
+ * Then the CSS animation code for the message container looks like so:
+ *
+ * ```css
+ * .my-messages {
+ *   transition:1s linear all;
+ * }
+ * .my-messages.ng-active {
+ *   // messages are visible
+ * }
+ * .my-messages.ng-inactive {
+ *   // messages are hidden
+ * }
+ * ```
+ *
+ * Whenever an inner message is attached (becomes visible) or removed (becomes hidden) then the enter
+ * and leave animation is triggered for each particular element bound to the `ngMessage` directive.
+ *
+ * Therefore, the CSS code for the inner messages looks like so:
+ *
+ * ```css
+ * .some-message {
+ *   transition:1s linear all;
+ * }
+ *
+ * .some-message.ng-enter {}
+ * .some-message.ng-enter.ng-enter-active {}
+ *
+ * .some-message.ng-leave {}
+ * .some-message.ng-leave.ng-leave-active {}
+ * ```
+ *
+ * {@link ngAnimate Click here} to learn how to use JavaScript animations or to learn more about ngAnimate.
+ */
+angular.module('ngMessages', [])
+
+   /**
+    * @ngdoc directive
+    * @module ngMessages
+    * @name ngMessages
+    * @restrict AE
+    *
+    * @description
+    * `ngMessages` is a directive that is designed to show and hide messages based on the state
+    * of a key/value object that it listens on. The directive itself complements error message
+    * reporting with the `ngModel` $error object (which stores a key/value state of validation errors).
+    *
+    * `ngMessages` manages the state of internal messages within its container element. The internal
+    * messages use the `ngMessage` directive and will be inserted/removed from the page depending
+    * on if they're present within the key/value object. By default, only one message will be displayed
+    * at a time and this depends on the prioritization of the messages within the template. (This can
+    * be changed by using the `ng-messages-multiple` or `multiple` attribute on the directive container.)
+    *
+    * A remote template can also be used to promote message reusability and messages can also be
+    * overridden.
+    *
+    * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.
+    *
+    * @usage
+    * ```html
+    * <!-- using attribute directives -->
+    * <ANY ng-messages="expression" role="alert">
+    *   <ANY ng-message="stringValue">...</ANY>
+    *   <ANY ng-message="stringValue1, stringValue2, ...">...</ANY>
+    *   <ANY ng-message-exp="expressionValue">...</ANY>
+    * </ANY>
+    *
+    * <!-- or by using element directives -->
+    * <ng-messages for="expression" role="alert">
+    *   <ng-message when="stringValue">...</ng-message>
+    *   <ng-message when="stringValue1, stringValue2, ...">...</ng-message>
+    *   <ng-message when-exp="expressionValue">...</ng-message>
+    * </ng-messages>
+    * ```
+    *
+    * @param {string} ngMessages an angular expression evaluating to a key/value object
+    *                 (this is typically the $error object on an ngModel instance).
+    * @param {string=} ngMessagesMultiple|multiple when set, all messages will be displayed with true
+    *
+    * @example
+    * <example name="ngMessages-directive" module="ngMessagesExample"
+    *          deps="angular-messages.js"
+    *          animations="true" fixBase="true">
+    *   <file name="index.html">
+    *     <form name="myForm">
+    *       <label>
+    *         Enter your name:
+    *         <input type="text"
+    *                name="myName"
+    *                ng-model="name"
+    *                ng-minlength="5"
+    *                ng-maxlength="20"
+    *                required />
+    *       </label>
+    *       <pre>myForm.myName.$error = {{ myForm.myName.$error | json }}</pre>
+    *
+    *       <div ng-messages="myForm.myName.$error" style="color:maroon" role="alert">
+    *         <div ng-message="required">You did not enter a field</div>
+    *         <div ng-message="minlength">Your field is too short</div>
+    *         <div ng-message="maxlength">Your field is too long</div>
+    *       </div>
+    *     </form>
+    *   </file>
+    *   <file name="script.js">
+    *     angular.module('ngMessagesExample', ['ngMessages']);
+    *   </file>
+    * </example>
+    */
+   .directive('ngMessages', ['$animate', function($animate) {
+     var ACTIVE_CLASS = 'ng-active';
+     var INACTIVE_CLASS = 'ng-inactive';
+
+     return {
+       require: 'ngMessages',
+       restrict: 'AE',
+       controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
+         var ctrl = this;
+         var latestKey = 0;
+         var nextAttachId = 0;
+
+         this.getAttachId = function getAttachId() { return nextAttachId++; };
+
+         var messages = this.messages = {};
+         var renderLater, cachedCollection;
+
+         this.render = function(collection) {
+           collection = collection || {};
+
+           renderLater = false;
+           cachedCollection = collection;
+
+           // this is true if the attribute is empty or if the attribute value is truthy
+           var multiple = isAttrTruthy($scope, $attrs.ngMessagesMultiple) ||
+                          isAttrTruthy($scope, $attrs.multiple);
+
+           var unmatchedMessages = [];
+           var matchedKeys = {};
+           var messageItem = ctrl.head;
+           var messageFound = false;
+           var totalMessages = 0;
+
+           // we use != instead of !== to allow for both undefined and null values
+           while (messageItem != null) {
+             totalMessages++;
+             var messageCtrl = messageItem.message;
+
+             var messageUsed = false;
+             if (!messageFound) {
+               forEach(collection, function(value, key) {
+                 if (!messageUsed && truthy(value) && messageCtrl.test(key)) {
+                   // this is to prevent the same error name from showing up twice
+                   if (matchedKeys[key]) return;
+                   matchedKeys[key] = true;
+
+                   messageUsed = true;
+                   messageCtrl.attach();
+                 }
+               });
+             }
+
+             if (messageUsed) {
+               // unless we want to display multiple messages then we should
+               // set a flag here to avoid displaying the next message in the list
+               messageFound = !multiple;
+             } else {
+               unmatchedMessages.push(messageCtrl);
+             }
+
+             messageItem = messageItem.next;
+           }
+
+           forEach(unmatchedMessages, function(messageCtrl) {
+             messageCtrl.detach();
+           });
+
+           unmatchedMessages.length !== totalMessages
+              ? $animate.setClass($element, ACTIVE_CLASS, INACTIVE_CLASS)
+              : $animate.setClass($element, INACTIVE_CLASS, ACTIVE_CLASS);
+         };
+
+         $scope.$watchCollection($attrs.ngMessages || $attrs['for'], ctrl.render);
+
+         this.reRender = function() {
+           if (!renderLater) {
+             renderLater = true;
+             $scope.$evalAsync(function() {
+               if (renderLater) {
+                 cachedCollection && ctrl.render(cachedCollection);
+               }
+             });
+           }
+         };
+
+         this.register = function(comment, messageCtrl) {
+           var nextKey = latestKey.toString();
+           messages[nextKey] = {
+             message: messageCtrl
+           };
+           insertMessageNode($element[0], comment, nextKey);
+           comment.$$ngMessageNode = nextKey;
+           latestKey++;
+
+           ctrl.reRender();
+         };
+
+         this.deregister = function(comment) {
+           var key = comment.$$ngMessageNode;
+           delete comment.$$ngMessageNode;
+           removeMessageNode($element[0], comment, key);
+           delete messages[key];
+           ctrl.reRender();
+         };
+
+         function findPreviousMessage(parent, comment) {
+           var prevNode = comment;
+           var parentLookup = [];
+           while (prevNode && prevNode !== parent) {
+             var prevKey = prevNode.$$ngMessageNode;
+             if (prevKey && prevKey.length) {
+               return messages[prevKey];
+             }
+
+             // dive deeper into the DOM and examine its children for any ngMessage
+             // comments that may be in an element that appears deeper in the list
+             if (prevNode.childNodes.length && parentLookup.indexOf(prevNode) == -1) {
+               parentLookup.push(prevNode);
+               prevNode = prevNode.childNodes[prevNode.childNodes.length - 1];
+             } else {
+               prevNode = prevNode.previousSibling || prevNode.parentNode;
+             }
+           }
+         }
+
+         function insertMessageNode(parent, comment, key) {
+           var messageNode = messages[key];
+           if (!ctrl.head) {
+             ctrl.head = messageNode;
+           } else {
+             var match = findPreviousMessage(parent, comment);
+             if (match) {
+               messageNode.next = match.next;
+               match.next = messageNode;
+             } else {
+               messageNode.next = ctrl.head;
+               ctrl.head = messageNode;
+             }
+           }
+         }
+
+         function removeMessageNode(parent, comment, key) {
+           var messageNode = messages[key];
+
+           var match = findPreviousMessage(parent, comment);
+           if (match) {
+             match.next = messageNode.next;
+           } else {
+             ctrl.head = messageNode.next;
+           }
+         }
+       }]
+     };
+
+     function isAttrTruthy(scope, attr) {
+      return (isString(attr) && attr.length === 0) || //empty attribute
+             truthy(scope.$eval(attr));
+     }
+
+     function truthy(val) {
+       return isString(val) ? val.length : !!val;
+     }
+   }])
+
+   /**
+    * @ngdoc directive
+    * @name ngMessagesInclude
+    * @restrict AE
+    * @scope
+    *
+    * @description
+    * `ngMessagesInclude` is a directive with the purpose to import existing ngMessage template
+    * code from a remote template and place the downloaded template code into the exact spot
+    * that the ngMessagesInclude directive is placed within the ngMessages container. This allows
+    * for a series of pre-defined messages to be reused and also allows for the developer to
+    * determine what messages are overridden due to the placement of the ngMessagesInclude directive.
+    *
+    * @usage
+    * ```html
+    * <!-- using attribute directives -->
+    * <ANY ng-messages="expression" role="alert">
+    *   <ANY ng-messages-include="remoteTplString">...</ANY>
+    * </ANY>
+    *
+    * <!-- or by using element directives -->
+    * <ng-messages for="expression" role="alert">
+    *   <ng-messages-include src="expressionValue1">...</ng-messages-include>
+    * </ng-messages>
+    * ```
+    *
+    * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.
+    *
+    * @param {string} ngMessagesInclude|src a string value corresponding to the remote template.
+    */
+   .directive('ngMessagesInclude',
+     ['$templateRequest', '$document', '$compile', function($templateRequest, $document, $compile) {
+
+     return {
+       restrict: 'AE',
+       require: '^^ngMessages', // we only require this for validation sake
+       link: function($scope, element, attrs) {
+         var src = attrs.ngMessagesInclude || attrs.src;
+         $templateRequest(src).then(function(html) {
+           $compile(html)($scope, function(contents) {
+             element.after(contents);
+
+             // the anchor is placed for debugging purposes
+             var anchor = jqLite($document[0].createComment(' ngMessagesInclude: ' + src + ' '));
+             element.after(anchor);
+
+             // we don't want to pollute the DOM anymore by keeping an empty directive element
+             element.remove();
+           });
+         });
+       }
+     };
+   }])
+
+   /**
+    * @ngdoc directive
+    * @name ngMessage
+    * @restrict AE
+    * @scope
+    *
+    * @description
+    * `ngMessage` is a directive with the purpose to show and hide a particular message.
+    * For `ngMessage` to operate, a parent `ngMessages` directive on a parent DOM element
+    * must be situated since it determines which messages are visible based on the state
+    * of the provided key/value map that `ngMessages` listens on.
+    *
+    * More information about using `ngMessage` can be found in the
+    * {@link module:ngMessages `ngMessages` module documentation}.
+    *
+    * @usage
+    * ```html
+    * <!-- using attribute directives -->
+    * <ANY ng-messages="expression" role="alert">
+    *   <ANY ng-message="stringValue">...</ANY>
+    *   <ANY ng-message="stringValue1, stringValue2, ...">...</ANY>
+    * </ANY>
+    *
+    * <!-- or by using element directives -->
+    * <ng-messages for="expression" role="alert">
+    *   <ng-message when="stringValue">...</ng-message>
+    *   <ng-message when="stringValue1, stringValue2, ...">...</ng-message>
+    * </ng-messages>
+    * ```
+    *
+    * @param {expression} ngMessage|when a string value corresponding to the message key.
+    */
+  .directive('ngMessage', ngMessageDirectiveFactory())
+
+
+   /**
+    * @ngdoc directive
+    * @name ngMessageExp
+    * @restrict AE
+    * @priority 1
+    * @scope
+    *
+    * @description
+    * `ngMessageExp` is a directive with the purpose to show and hide a particular message.
+    * For `ngMessageExp` to operate, a parent `ngMessages` directive on a parent DOM element
+    * must be situated since it determines which messages are visible based on the state
+    * of the provided key/value map that `ngMessages` listens on.
+    *
+    * @usage
+    * ```html
+    * <!-- using attribute directives -->
+    * <ANY ng-messages="expression">
+    *   <ANY ng-message-exp="expressionValue">...</ANY>
+    * </ANY>
+    *
+    * <!-- or by using element directives -->
+    * <ng-messages for="expression">
+    *   <ng-message when-exp="expressionValue">...</ng-message>
+    * </ng-messages>
+    * ```
+    *
+    * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.
+    *
+    * @param {expression} ngMessageExp|whenExp an expression value corresponding to the message key.
+    */
+  .directive('ngMessageExp', ngMessageDirectiveFactory());
+
+function ngMessageDirectiveFactory() {
+  return ['$animate', function($animate) {
+    return {
+      restrict: 'AE',
+      transclude: 'element',
+      priority: 1, // must run before ngBind, otherwise the text is set on the comment
+      terminal: true,
+      require: '^^ngMessages',
+      link: function(scope, element, attrs, ngMessagesCtrl, $transclude) {
+        var commentNode = element[0];
+
+        var records;
+        var staticExp = attrs.ngMessage || attrs.when;
+        var dynamicExp = attrs.ngMessageExp || attrs.whenExp;
+        var assignRecords = function(items) {
+          records = items
+              ? (isArray(items)
+                    ? items
+                    : items.split(/[\s,]+/))
+              : null;
+          ngMessagesCtrl.reRender();
+        };
+
+        if (dynamicExp) {
+          assignRecords(scope.$eval(dynamicExp));
+          scope.$watchCollection(dynamicExp, assignRecords);
+        } else {
+          assignRecords(staticExp);
+        }
+
+        var currentElement, messageCtrl;
+        ngMessagesCtrl.register(commentNode, messageCtrl = {
+          test: function(name) {
+            return contains(records, name);
+          },
+          attach: function() {
+            if (!currentElement) {
+              $transclude(scope, function(elm) {
+                $animate.enter(elm, null, element);
+                currentElement = elm;
+
+                // Each time we attach this node to a message we get a new id that we can match
+                // when we are destroying the node later.
+                var $$attachId = currentElement.$$attachId = ngMessagesCtrl.getAttachId();
+
+                // in the event that the parent element is destroyed
+                // by any other structural directive then it's time
+                // to deregister the message from the controller
+                currentElement.on('$destroy', function() {
+                  if (currentElement && currentElement.$$attachId === $$attachId) {
+                    ngMessagesCtrl.deregister(commentNode);
+                    messageCtrl.detach();
+                  }
+                });
+              });
+            }
+          },
+          detach: function() {
+            if (currentElement) {
+              var elm = currentElement;
+              currentElement = null;
+              $animate.leave(elm);
+            }
+          }
+        });
+      }
+    };
+  }];
+
+  function contains(collection, key) {
+    if (collection) {
+      return isArray(collection)
+          ? collection.indexOf(key) >= 0
+          : collection.hasOwnProperty(key);
+    }
+  }
+}
+
+
+})(window, window.angular);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js
new file mode 100644
index 0000000..19f59cc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js
@@ -0,0 +1,12 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(A,d,B){'use strict';function l(){return["$animate",function(v){return{restrict:"AE",transclude:"element",priority:1,terminal:!0,require:"^^ngMessages",link:function(n,r,a,b,m){var k=r[0],f,p=a.ngMessage||a.when;a=a.ngMessageExp||a.whenExp;var d=function(a){f=a?w(a)?a:a.split(/[\s,]+/):null;b.reRender()};a?(d(n.$eval(a)),n.$watchCollection(a,d)):d(p);var e,q;b.register(k,q={test:function(a){var g=f;a=g?w(g)?0<=g.indexOf(a):g.hasOwnProperty(a):void 0;return a},attach:function(){e||m(n,function(a){v.enter(a,
+null,r);e=a;var g=e.$$attachId=b.getAttachId();e.on("$destroy",function(){e&&e.$$attachId===g&&(b.deregister(k),q.detach())})})},detach:function(){if(e){var a=e;e=null;v.leave(a)}}})}}}]}var w=d.isArray,x=d.forEach,y=d.isString,z=d.element;d.module("ngMessages",[]).directive("ngMessages",["$animate",function(d){function n(a,b){return y(b)&&0===b.length||r(a.$eval(b))}function r(a){return y(a)?a.length:!!a}return{require:"ngMessages",restrict:"AE",controller:["$element","$scope","$attrs",function(a,
+b,m){function k(a,b){for(var c=b,f=[];c&&c!==a;){var h=c.$$ngMessageNode;if(h&&h.length)return e[h];c.childNodes.length&&-1==f.indexOf(c)?(f.push(c),c=c.childNodes[c.childNodes.length-1]):c=c.previousSibling||c.parentNode}}var f=this,p=0,l=0;this.getAttachId=function(){return l++};var e=this.messages={},q,s;this.render=function(g){g=g||{};q=!1;s=g;for(var e=n(b,m.ngMessagesMultiple)||n(b,m.multiple),c=[],k={},h=f.head,p=!1,l=0;null!=h;){l++;var t=h.message,u=!1;p||x(g,function(a,c){!u&&r(a)&&t.test(c)&&
+!k[c]&&(u=k[c]=!0,t.attach())});u?p=!e:c.push(t);h=h.next}x(c,function(a){a.detach()});c.length!==l?d.setClass(a,"ng-active","ng-inactive"):d.setClass(a,"ng-inactive","ng-active")};b.$watchCollection(m.ngMessages||m["for"],f.render);this.reRender=function(){q||(q=!0,b.$evalAsync(function(){q&&s&&f.render(s)}))};this.register=function(g,b){var c=p.toString();e[c]={message:b};var d=a[0],h=e[c];f.head?(d=k(d,g))?(h.next=d.next,d.next=h):(h.next=f.head,f.head=h):f.head=h;g.$$ngMessageNode=c;p++;f.reRender()};
+this.deregister=function(b){var d=b.$$ngMessageNode;delete b.$$ngMessageNode;var c=e[d];(b=k(a[0],b))?b.next=c.next:f.head=c.next;delete e[d];f.reRender()}}]}}]).directive("ngMessagesInclude",["$templateRequest","$document","$compile",function(d,n,l){return{restrict:"AE",require:"^^ngMessages",link:function(a,b,m){var k=m.ngMessagesInclude||m.src;d(k).then(function(d){l(d)(a,function(a){b.after(a);a=z(n[0].createComment(" ngMessagesInclude: "+k+" "));b.after(a);b.remove()})})}}}]).directive("ngMessage",
+l()).directive("ngMessageExp",l())})(window,window.angular);
+//# sourceMappingURL=angular-messages.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js.map
new file mode 100644
index 0000000..0cb2a94
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-messages.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-messages.min.js",
+"lineCount":11,
+"mappings":"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",
+"sources":["angular-messages.js"],
+"names":["window","angular","undefined","ngMessageDirectiveFactory","$animate","restrict","transclude","priority","terminal","require","link","scope","element","attrs","ngMessagesCtrl","$transclude","commentNode","records","staticExp","ngMessage","when","dynamicExp","ngMessageExp","whenExp","assignRecords","items","isArray","split","reRender","$eval","$watchCollection","currentElement","messageCtrl","register","test","name","collection","indexOf","hasOwnProperty","attach","elm","enter","$$attachId","getAttachId","on","deregister","detach","leave","forEach","isString","jqLite","module","directive","isAttrTruthy","attr","length","truthy","val","controller","$element","$scope","$attrs","findPreviousMessage","parent","comment","prevNode","parentLookup","prevKey","$$ngMessageNode","messages","childNodes","push","previousSibling","parentNode","ctrl","latestKey","nextAttachId","this.getAttachId","renderLater","cachedCollection","render","this.render","multiple","ngMessagesMultiple","unmatc
 hedMessages","matchedKeys","messageItem","head","messageFound","totalMessages","message","messageUsed","value","key","next","setClass","ACTIVE_CLASS","INACTIVE_CLASS","ngMessages","this.reRender","$evalAsync","this.register","nextKey","toString","messageNode","match","this.deregister","$templateRequest","$document","$compile","src","ngMessagesInclude","then","html","contents","after","anchor","createComment","remove"]
+}


[14/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe.js
new file mode 100644
index 0000000..e48e27b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimans",
+      "lindi",
+      "mardi",
+      "merkredi",
+      "zedi",
+      "vandredi",
+      "samdi"
+    ],
+    "ERANAMES": [
+      "avan Zezi-Krist",
+      "apre Zezi-Krist"
+    ],
+    "ERAS": [
+      "av. Z-K",
+      "ap. Z-K"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "zanvie",
+      "fevriye",
+      "mars",
+      "avril",
+      "me",
+      "zin",
+      "zilye",
+      "out",
+      "septam",
+      "oktob",
+      "novam",
+      "desam"
+    ],
+    "SHORTDAY": [
+      "dim",
+      "lin",
+      "mar",
+      "mer",
+      "ze",
+      "van",
+      "sam"
+    ],
+    "SHORTMONTH": [
+      "zan",
+      "fev",
+      "mar",
+      "avr",
+      "me",
+      "zin",
+      "zil",
+      "out",
+      "sep",
+      "okt",
+      "nov",
+      "des"
+    ],
+    "STANDALONEMONTH": [
+      "zanvie",
+      "fevriye",
+      "mars",
+      "avril",
+      "me",
+      "zin",
+      "zilye",
+      "out",
+      "septam",
+      "oktob",
+      "novam",
+      "desam"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MURs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mfe",
+  "localeID": "mfe",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg-mg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg-mg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg-mg.js
new file mode 100644
index 0000000..1bb99a0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg-mg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Alahady",
+      "Alatsinainy",
+      "Talata",
+      "Alarobia",
+      "Alakamisy",
+      "Zoma",
+      "Asabotsy"
+    ],
+    "ERANAMES": [
+      "Alohan\u2019i JK",
+      "Aorian\u2019i JK"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janoary",
+      "Febroary",
+      "Martsa",
+      "Aprily",
+      "Mey",
+      "Jona",
+      "Jolay",
+      "Aogositra",
+      "Septambra",
+      "Oktobra",
+      "Novambra",
+      "Desambra"
+    ],
+    "SHORTDAY": [
+      "Alah",
+      "Alats",
+      "Tal",
+      "Alar",
+      "Alak",
+      "Zom",
+      "Asab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mey",
+      "Jon",
+      "Jol",
+      "Aog",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Janoary",
+      "Febroary",
+      "Martsa",
+      "Aprily",
+      "Mey",
+      "Jona",
+      "Jolay",
+      "Aogositra",
+      "Septambra",
+      "Oktobra",
+      "Novambra",
+      "Desambra"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ar",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mg-mg",
+  "localeID": "mg_MG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg.js
new file mode 100644
index 0000000..5c27790
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Alahady",
+      "Alatsinainy",
+      "Talata",
+      "Alarobia",
+      "Alakamisy",
+      "Zoma",
+      "Asabotsy"
+    ],
+    "ERANAMES": [
+      "Alohan\u2019i JK",
+      "Aorian\u2019i JK"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janoary",
+      "Febroary",
+      "Martsa",
+      "Aprily",
+      "Mey",
+      "Jona",
+      "Jolay",
+      "Aogositra",
+      "Septambra",
+      "Oktobra",
+      "Novambra",
+      "Desambra"
+    ],
+    "SHORTDAY": [
+      "Alah",
+      "Alats",
+      "Tal",
+      "Alar",
+      "Alak",
+      "Zom",
+      "Asab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mey",
+      "Jon",
+      "Jol",
+      "Aog",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Janoary",
+      "Febroary",
+      "Martsa",
+      "Aprily",
+      "Mey",
+      "Jona",
+      "Jolay",
+      "Aogositra",
+      "Septambra",
+      "Oktobra",
+      "Novambra",
+      "Desambra"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ar",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mg",
+  "localeID": "mg",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh-mz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh-mz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh-mz.js
new file mode 100644
index 0000000..f883d1c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh-mz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "wichishu",
+      "mchochil\u2019l"
+    ],
+    "DAY": [
+      "Sabato",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Arahamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Hinapiya yesu",
+      "Yopia yesu"
+    ],
+    "ERAS": [
+      "HY",
+      "YY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mweri wo kwanza",
+      "Mweri wo unayeli",
+      "Mweri wo uneraru",
+      "Mweri wo unecheshe",
+      "Mweri wo unethanu",
+      "Mweri wo thanu na mocha",
+      "Mweri wo saba",
+      "Mweri wo nane",
+      "Mweri wo tisa",
+      "Mweri wo kumi",
+      "Mweri wo kumi na moja",
+      "Mweri wo kumi na yel\u2019li"
+    ],
+    "SHORTDAY": [
+      "Sab",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Ara",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Kwa",
+      "Una",
+      "Rar",
+      "Che",
+      "Tha",
+      "Moc",
+      "Sab",
+      "Nan",
+      "Tis",
+      "Kum",
+      "Moj",
+      "Yel"
+    ],
+    "STANDALONEMONTH": [
+      "Mweri wo kwanza",
+      "Mweri wo unayeli",
+      "Mweri wo uneraru",
+      "Mweri wo unecheshe",
+      "Mweri wo unethanu",
+      "Mweri wo thanu na mocha",
+      "Mweri wo saba",
+      "Mweri wo nane",
+      "Mweri wo tisa",
+      "Mweri wo kumi",
+      "Mweri wo kumi na moja",
+      "Mweri wo kumi na yel\u2019li"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MTn",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mgh-mz",
+  "localeID": "mgh_MZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh.js
new file mode 100644
index 0000000..e35cb07
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "wichishu",
+      "mchochil\u2019l"
+    ],
+    "DAY": [
+      "Sabato",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Arahamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Hinapiya yesu",
+      "Yopia yesu"
+    ],
+    "ERAS": [
+      "HY",
+      "YY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mweri wo kwanza",
+      "Mweri wo unayeli",
+      "Mweri wo uneraru",
+      "Mweri wo unecheshe",
+      "Mweri wo unethanu",
+      "Mweri wo thanu na mocha",
+      "Mweri wo saba",
+      "Mweri wo nane",
+      "Mweri wo tisa",
+      "Mweri wo kumi",
+      "Mweri wo kumi na moja",
+      "Mweri wo kumi na yel\u2019li"
+    ],
+    "SHORTDAY": [
+      "Sab",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Ara",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Kwa",
+      "Una",
+      "Rar",
+      "Che",
+      "Tha",
+      "Moc",
+      "Sab",
+      "Nan",
+      "Tis",
+      "Kum",
+      "Moj",
+      "Yel"
+    ],
+    "STANDALONEMONTH": [
+      "Mweri wo kwanza",
+      "Mweri wo unayeli",
+      "Mweri wo uneraru",
+      "Mweri wo unecheshe",
+      "Mweri wo unethanu",
+      "Mweri wo thanu na mocha",
+      "Mweri wo saba",
+      "Mweri wo nane",
+      "Mweri wo tisa",
+      "Mweri wo kumi",
+      "Mweri wo kumi na moja",
+      "Mweri wo kumi na yel\u2019li"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MTn",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mgh",
+  "localeID": "mgh",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo-cm.js
new file mode 100644
index 0000000..d1dc4f6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Aneg 1",
+      "Aneg 2",
+      "Aneg 3",
+      "Aneg 4",
+      "Aneg 5",
+      "Aneg 6",
+      "Aneg 7"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "im\u0259g mbegtug",
+      "imeg \u00e0b\u00f9b\u00ec",
+      "imeg mb\u0259\u014bchubi",
+      "im\u0259g ngw\u0259\u0300t",
+      "im\u0259g fog",
+      "im\u0259g ichiib\u0254d",
+      "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b",
+      "im\u0259g ichika",
+      "im\u0259g kud",
+      "im\u0259g t\u00e8si\u02bce",
+      "im\u0259g z\u00f2",
+      "im\u0259g krizmed"
+    ],
+    "SHORTDAY": [
+      "Aneg 1",
+      "Aneg 2",
+      "Aneg 3",
+      "Aneg 4",
+      "Aneg 5",
+      "Aneg 6",
+      "Aneg 7"
+    ],
+    "SHORTMONTH": [
+      "mbegtug",
+      "imeg \u00e0b\u00f9b\u00ec",
+      "imeg mb\u0259\u014bchubi",
+      "im\u0259g ngw\u0259\u0300t",
+      "im\u0259g fog",
+      "im\u0259g ichiib\u0254d",
+      "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b",
+      "im\u0259g ichika",
+      "im\u0259g kud",
+      "im\u0259g t\u00e8si\u02bce",
+      "im\u0259g z\u00f2",
+      "im\u0259g krizmed"
+    ],
+    "STANDALONEMONTH": [
+      "im\u0259g mbegtug",
+      "imeg \u00e0b\u00f9b\u00ec",
+      "imeg mb\u0259\u014bchubi",
+      "im\u0259g ngw\u0259\u0300t",
+      "im\u0259g fog",
+      "im\u0259g ichiib\u0254d",
+      "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b",
+      "im\u0259g ichika",
+      "im\u0259g kud",
+      "im\u0259g t\u00e8si\u02bce",
+      "im\u0259g z\u00f2",
+      "im\u0259g krizmed"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mgo-cm",
+  "localeID": "mgo_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo.js
new file mode 100644
index 0000000..23ab0b1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mgo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Aneg 1",
+      "Aneg 2",
+      "Aneg 3",
+      "Aneg 4",
+      "Aneg 5",
+      "Aneg 6",
+      "Aneg 7"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "im\u0259g mbegtug",
+      "imeg \u00e0b\u00f9b\u00ec",
+      "imeg mb\u0259\u014bchubi",
+      "im\u0259g ngw\u0259\u0300t",
+      "im\u0259g fog",
+      "im\u0259g ichiib\u0254d",
+      "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b",
+      "im\u0259g ichika",
+      "im\u0259g kud",
+      "im\u0259g t\u00e8si\u02bce",
+      "im\u0259g z\u00f2",
+      "im\u0259g krizmed"
+    ],
+    "SHORTDAY": [
+      "Aneg 1",
+      "Aneg 2",
+      "Aneg 3",
+      "Aneg 4",
+      "Aneg 5",
+      "Aneg 6",
+      "Aneg 7"
+    ],
+    "SHORTMONTH": [
+      "mbegtug",
+      "imeg \u00e0b\u00f9b\u00ec",
+      "imeg mb\u0259\u014bchubi",
+      "im\u0259g ngw\u0259\u0300t",
+      "im\u0259g fog",
+      "im\u0259g ichiib\u0254d",
+      "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b",
+      "im\u0259g ichika",
+      "im\u0259g kud",
+      "im\u0259g t\u00e8si\u02bce",
+      "im\u0259g z\u00f2",
+      "im\u0259g krizmed"
+    ],
+    "STANDALONEMONTH": [
+      "im\u0259g mbegtug",
+      "imeg \u00e0b\u00f9b\u00ec",
+      "imeg mb\u0259\u014bchubi",
+      "im\u0259g ngw\u0259\u0300t",
+      "im\u0259g fog",
+      "im\u0259g ichiib\u0254d",
+      "im\u0259g \u00e0d\u00f9mb\u0259\u0300\u014b",
+      "im\u0259g ichika",
+      "im\u0259g kud",
+      "im\u0259g t\u00e8si\u02bce",
+      "im\u0259g z\u00f2",
+      "im\u0259g krizmed"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mgo",
+  "localeID": "mgo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk-mk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk-mk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk-mk.js
new file mode 100644
index 0000000..1eb4837
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk-mk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435",
+      "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u043b\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a",
+      "\u043f\u0435\u0442\u043e\u043a",
+      "\u0441\u0430\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u043f\u0440\u0435\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430",
+      "\u043e\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430"
+    ],
+    "ERAS": [
+      "\u043f\u0440.\u043d.\u0435.",
+      "\u043d.\u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434.",
+      "\u043f\u043e\u043d.",
+      "\u0432\u0442.",
+      "\u0441\u0440\u0435.",
+      "\u0447\u0435\u0442.",
+      "\u043f\u0435\u0442.",
+      "\u0441\u0430\u0431."
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d.",
+      "\u0458\u0443\u043b.",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043f\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u0435\u043c.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd.M.y HH:mm:ss",
+    "mediumDate": "dd.M.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.M.yy HH:mm",
+    "shortDate": "dd.M.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mk-mk",
+  "localeID": "mk_MK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk.js
new file mode 100644
index 0000000..81b07fd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435\u0442\u043f\u043b\u0430\u0434\u043d\u0435",
+      "\u043f\u043e\u043f\u043b\u0430\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u043b\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a",
+      "\u043f\u0435\u0442\u043e\u043a",
+      "\u0441\u0430\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u043f\u0440\u0435\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430",
+      "\u043e\u0434 \u043d\u0430\u0448\u0430\u0442\u0430 \u0435\u0440\u0430"
+    ],
+    "ERAS": [
+      "\u043f\u0440.\u043d.\u0435.",
+      "\u043d.\u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434.",
+      "\u043f\u043e\u043d.",
+      "\u0432\u0442.",
+      "\u0441\u0440\u0435.",
+      "\u0447\u0435\u0442.",
+      "\u043f\u0435\u0442.",
+      "\u0441\u0430\u0431."
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d.",
+      "\u0458\u0443\u043b.",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043f\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u0435\u043c.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440\u0438",
+      "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+      "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+      "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+      "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd.M.y HH:mm:ss",
+    "mediumDate": "dd.M.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.M.yy HH:mm",
+    "shortDate": "dd.M.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mk",
+  "localeID": "mk",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml-in.js
new file mode 100644
index 0000000..e160fa9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a",
+      "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a"
+    ],
+    "ERANAMES": [
+      "\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u200c\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d4d \u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d4d",
+      "\u0d06\u0d28\u0d4d\u0d28\u0d4b \u0d21\u0d4a\u0d2e\u0d3f\u0d28\u0d3f"
+    ],
+    "ERAS": [
+      "\u0d15\u0d4d\u0d30\u0d3f.\u0d2e\u0d41.",
+      "\u0d0e\u0d21\u0d3f"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d",
+      "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d",
+      "\u0d2e\u0d47\u0d2f\u0d4d",
+      "\u0d1c\u0d42\u0d7a",
+      "\u0d1c\u0d42\u0d32\u0d48",
+      "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
+      "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c",
+      "\u0d12\u0d15\u0d4d\u200c\u0d1f\u0d4b\u0d2c\u0d7c",
+      "\u0d28\u0d35\u0d02\u0d2c\u0d7c",
+      "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c"
+    ],
+    "SHORTDAY": [
+      "\u0d1e\u0d3e\u0d2f\u0d7c",
+      "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e",
+      "\u0d1a\u0d4a\u0d35\u0d4d\u0d35",
+      "\u0d2c\u0d41\u0d27\u0d7b",
+      "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02",
+      "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f",
+      "\u0d36\u0d28\u0d3f"
+    ],
+    "SHORTMONTH": [
+      "\u0d1c\u0d28\u0d41",
+      "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41",
+      "\u0d2e\u0d3e\u0d7c",
+      "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f",
+      "\u0d2e\u0d47\u0d2f\u0d4d",
+      "\u0d1c\u0d42\u0d7a",
+      "\u0d1c\u0d42\u0d32\u0d48",
+      "\u0d13\u0d17",
+      "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02",
+      "\u0d12\u0d15\u0d4d\u0d1f\u0d4b",
+      "\u0d28\u0d35\u0d02",
+      "\u0d21\u0d3f\u0d38\u0d02"
+    ],
+    "STANDALONEMONTH": [
+      "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d",
+      "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d",
+      "\u0d2e\u0d47\u0d2f\u0d4d",
+      "\u0d1c\u0d42\u0d7a",
+      "\u0d1c\u0d42\u0d32\u0d48",
+      "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
+      "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c",
+      "\u0d12\u0d15\u0d4d\u200c\u0d1f\u0d4b\u0d2c\u0d7c",
+      "\u0d28\u0d35\u0d02\u0d2c\u0d7c",
+      "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "y, MMMM d, EEEE",
+    "longDate": "y, MMMM d",
+    "medium": "y, MMM d h:mm:ss a",
+    "mediumDate": "y, MMM d",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ml-in",
+  "localeID": "ml_IN",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml.js
new file mode 100644
index 0000000..1e2bcc8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ml.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a",
+      "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a",
+      "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u200c\u0d1a"
+    ],
+    "ERANAMES": [
+      "\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u200c\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d4d \u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d4d",
+      "\u0d06\u0d28\u0d4d\u0d28\u0d4b \u0d21\u0d4a\u0d2e\u0d3f\u0d28\u0d3f"
+    ],
+    "ERAS": [
+      "\u0d15\u0d4d\u0d30\u0d3f.\u0d2e\u0d41.",
+      "\u0d0e\u0d21\u0d3f"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d",
+      "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d",
+      "\u0d2e\u0d47\u0d2f\u0d4d",
+      "\u0d1c\u0d42\u0d7a",
+      "\u0d1c\u0d42\u0d32\u0d48",
+      "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
+      "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c",
+      "\u0d12\u0d15\u0d4d\u200c\u0d1f\u0d4b\u0d2c\u0d7c",
+      "\u0d28\u0d35\u0d02\u0d2c\u0d7c",
+      "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c"
+    ],
+    "SHORTDAY": [
+      "\u0d1e\u0d3e\u0d2f\u0d7c",
+      "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e",
+      "\u0d1a\u0d4a\u0d35\u0d4d\u0d35",
+      "\u0d2c\u0d41\u0d27\u0d7b",
+      "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02",
+      "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f",
+      "\u0d36\u0d28\u0d3f"
+    ],
+    "SHORTMONTH": [
+      "\u0d1c\u0d28\u0d41",
+      "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41",
+      "\u0d2e\u0d3e\u0d7c",
+      "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f",
+      "\u0d2e\u0d47\u0d2f\u0d4d",
+      "\u0d1c\u0d42\u0d7a",
+      "\u0d1c\u0d42\u0d32\u0d48",
+      "\u0d13\u0d17",
+      "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02",
+      "\u0d12\u0d15\u0d4d\u0d1f\u0d4b",
+      "\u0d28\u0d35\u0d02",
+      "\u0d21\u0d3f\u0d38\u0d02"
+    ],
+    "STANDALONEMONTH": [
+      "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f",
+      "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d",
+      "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d",
+      "\u0d2e\u0d47\u0d2f\u0d4d",
+      "\u0d1c\u0d42\u0d7a",
+      "\u0d1c\u0d42\u0d32\u0d48",
+      "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
+      "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c",
+      "\u0d12\u0d15\u0d4d\u200c\u0d1f\u0d4b\u0d2c\u0d7c",
+      "\u0d28\u0d35\u0d02\u0d2c\u0d7c",
+      "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "y, MMMM d, EEEE",
+    "longDate": "y, MMMM d",
+    "medium": "y, MMM d h:mm:ss a",
+    "mediumDate": "y, MMM d",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ml",
+  "localeID": "ml",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl-mn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl-mn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl-mn.js
new file mode 100644
index 0000000..8863207
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl-mn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u04ae\u04e8",
+      "\u04ae\u0425"
+    ],
+    "DAY": [
+      "\u043d\u044f\u043c",
+      "\u0434\u0430\u0432\u0430\u0430",
+      "\u043c\u044f\u0433\u043c\u0430\u0440",
+      "\u043b\u0445\u0430\u0433\u0432\u0430",
+      "\u043f\u04af\u0440\u044d\u0432",
+      "\u0431\u0430\u0430\u0441\u0430\u043d",
+      "\u0431\u044f\u043c\u0431\u0430"
+    ],
+    "ERANAMES": [
+      "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439 \u04e9\u043c\u043d\u04e9\u0445",
+      "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439"
+    ],
+    "ERAS": [
+      "\u041c\u042d\u04e8",
+      "\u041c\u042d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u041d\u044f",
+      "\u0414\u0430",
+      "\u041c\u044f",
+      "\u041b\u0445",
+      "\u041f\u04af",
+      "\u0411\u0430",
+      "\u0411\u044f"
+    ],
+    "SHORTMONTH": [
+      "1-\u0440 \u0441\u0430\u0440",
+      "2-\u0440 \u0441\u0430\u0440",
+      "3-\u0440 \u0441\u0430\u0440",
+      "4-\u0440 \u0441\u0430\u0440",
+      "5-\u0440 \u0441\u0430\u0440",
+      "6-\u0440 \u0441\u0430\u0440",
+      "7-\u0440 \u0441\u0430\u0440",
+      "8-\u0440 \u0441\u0430\u0440",
+      "9-\u0440 \u0441\u0430\u0440",
+      "10-\u0440 \u0441\u0430\u0440",
+      "11-\u0440 \u0441\u0430\u0440",
+      "12-\u0440 \u0441\u0430\u0440"
+    ],
+    "STANDALONEMONTH": [
+      "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d",
+    "longDate": "y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ae",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mn-cyrl-mn",
+  "localeID": "mn_Cyrl_MN",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl.js
new file mode 100644
index 0000000..6b29e4e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn-cyrl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u04ae\u04e8",
+      "\u04ae\u0425"
+    ],
+    "DAY": [
+      "\u043d\u044f\u043c",
+      "\u0434\u0430\u0432\u0430\u0430",
+      "\u043c\u044f\u0433\u043c\u0430\u0440",
+      "\u043b\u0445\u0430\u0433\u0432\u0430",
+      "\u043f\u04af\u0440\u044d\u0432",
+      "\u0431\u0430\u0430\u0441\u0430\u043d",
+      "\u0431\u044f\u043c\u0431\u0430"
+    ],
+    "ERANAMES": [
+      "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439 \u04e9\u043c\u043d\u04e9\u0445",
+      "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439"
+    ],
+    "ERAS": [
+      "\u041c\u042d\u04e8",
+      "\u041c\u042d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u041d\u044f",
+      "\u0414\u0430",
+      "\u041c\u044f",
+      "\u041b\u0445",
+      "\u041f\u04af",
+      "\u0411\u0430",
+      "\u0411\u044f"
+    ],
+    "SHORTMONTH": [
+      "1-\u0440 \u0441\u0430\u0440",
+      "2-\u0440 \u0441\u0430\u0440",
+      "3-\u0440 \u0441\u0430\u0440",
+      "4-\u0440 \u0441\u0430\u0440",
+      "5-\u0440 \u0441\u0430\u0440",
+      "6-\u0440 \u0441\u0430\u0440",
+      "7-\u0440 \u0441\u0430\u0440",
+      "8-\u0440 \u0441\u0430\u0440",
+      "9-\u0440 \u0441\u0430\u0440",
+      "10-\u0440 \u0441\u0430\u0440",
+      "11-\u0440 \u0441\u0430\u0440",
+      "12-\u0440 \u0441\u0430\u0440"
+    ],
+    "STANDALONEMONTH": [
+      "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d",
+    "longDate": "y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ae",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mn-cyrl",
+  "localeID": "mn_Cyrl",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn.js
new file mode 100644
index 0000000..05f44fc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u04ae\u04e8",
+      "\u04ae\u0425"
+    ],
+    "DAY": [
+      "\u043d\u044f\u043c",
+      "\u0434\u0430\u0432\u0430\u0430",
+      "\u043c\u044f\u0433\u043c\u0430\u0440",
+      "\u043b\u0445\u0430\u0433\u0432\u0430",
+      "\u043f\u04af\u0440\u044d\u0432",
+      "\u0431\u0430\u0430\u0441\u0430\u043d",
+      "\u0431\u044f\u043c\u0431\u0430"
+    ],
+    "ERANAMES": [
+      "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439 \u04e9\u043c\u043d\u04e9\u0445",
+      "\u043c\u0430\u043d\u0430\u0439 \u044d\u0440\u0438\u043d\u0438\u0439"
+    ],
+    "ERAS": [
+      "\u041c\u042d\u04e8",
+      "\u041c\u042d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u041d\u044f",
+      "\u0414\u0430",
+      "\u041c\u044f",
+      "\u041b\u0445",
+      "\u041f\u04af",
+      "\u0411\u0430",
+      "\u0411\u044f"
+    ],
+    "SHORTMONTH": [
+      "1-\u0440 \u0441\u0430\u0440",
+      "2-\u0440 \u0441\u0430\u0440",
+      "3-\u0440 \u0441\u0430\u0440",
+      "4-\u0440 \u0441\u0430\u0440",
+      "5-\u0440 \u0441\u0430\u0440",
+      "6-\u0440 \u0441\u0430\u0440",
+      "7-\u0440 \u0441\u0430\u0440",
+      "8-\u0440 \u0441\u0430\u0440",
+      "9-\u0440 \u0441\u0430\u0440",
+      "10-\u0440 \u0441\u0430\u0440",
+      "11-\u0440 \u0441\u0430\u0440",
+      "12-\u0440 \u0441\u0430\u0440"
+    ],
+    "STANDALONEMONTH": [
+      "\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440",
+      "\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d",
+    "longDate": "y '\u043e\u043d\u044b' MM '\u0441\u0430\u0440\u044b\u043d' d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ae",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mn",
+  "localeID": "mn",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr-in.js
new file mode 100644
index 0000000..d184dd6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092e.\u092a\u0942.",
+      "\u092e.\u0909."
+    ],
+    "DAY": [
+      "\u0930\u0935\u093f\u0935\u093e\u0930",
+      "\u0938\u094b\u092e\u0935\u093e\u0930",
+      "\u092e\u0902\u0917\u0933\u0935\u093e\u0930",
+      "\u092c\u0941\u0927\u0935\u093e\u0930",
+      "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+      "\u0936\u0928\u093f\u0935\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u0935\u0940\u0938\u0928\u092a\u0942\u0930\u094d\u0935",
+      "\u0908\u0938\u0935\u0940\u0938\u0928"
+    ],
+    "ERAS": [
+      "\u0907. \u0938. \u092a\u0942.",
+      "\u0907. \u0938."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0911\u0917\u0938\u094d\u091f",
+      "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u0935\u093f",
+      "\u0938\u094b\u092e",
+      "\u092e\u0902\u0917\u0933",
+      "\u092c\u0941\u0927",
+      "\u0917\u0941\u0930\u0941",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u093e\u0928\u0947",
+      "\u092b\u0947\u092c\u094d\u0930\u0941",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0911\u0917",
+      "\u0938\u092a\u094d\u091f\u0947\u0902",
+      "\u0911\u0915\u094d\u091f\u094b",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902",
+      "\u0921\u093f\u0938\u0947\u0902"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0911\u0917\u0938\u094d\u091f",
+      "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mr-in",
+  "localeID": "mr_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr.js
new file mode 100644
index 0000000..868b0d0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092e.\u092a\u0942.",
+      "\u092e.\u0909."
+    ],
+    "DAY": [
+      "\u0930\u0935\u093f\u0935\u093e\u0930",
+      "\u0938\u094b\u092e\u0935\u093e\u0930",
+      "\u092e\u0902\u0917\u0933\u0935\u093e\u0930",
+      "\u092c\u0941\u0927\u0935\u093e\u0930",
+      "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+      "\u0936\u0928\u093f\u0935\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u0935\u0940\u0938\u0928\u092a\u0942\u0930\u094d\u0935",
+      "\u0908\u0938\u0935\u0940\u0938\u0928"
+    ],
+    "ERAS": [
+      "\u0907. \u0938. \u092a\u0942.",
+      "\u0907. \u0938."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0911\u0917\u0938\u094d\u091f",
+      "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u0935\u093f",
+      "\u0938\u094b\u092e",
+      "\u092e\u0902\u0917\u0933",
+      "\u092c\u0941\u0927",
+      "\u0917\u0941\u0930\u0941",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u093e\u0928\u0947",
+      "\u092b\u0947\u092c\u094d\u0930\u0941",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0911\u0917",
+      "\u0938\u092a\u094d\u091f\u0947\u0902",
+      "\u0911\u0915\u094d\u091f\u094b",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902",
+      "\u0921\u093f\u0938\u0947\u0902"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0911\u0917\u0938\u094d\u091f",
+      "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mr",
+  "localeID": "mr",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-bn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-bn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-bn.js
new file mode 100644
index 0000000..05e662d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-bn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "PG",
+      "PTG"
+    ],
+    "DAY": [
+      "Ahad",
+      "Isnin",
+      "Selasa",
+      "Rabu",
+      "Khamis",
+      "Jumaat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "S.M.",
+      "TM"
+    ],
+    "ERAS": [
+      "S.M.",
+      "TM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "SHORTDAY": [
+      "Ahd",
+      "Isn",
+      "Sel",
+      "Rab",
+      "Kha",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ogo",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ms-latn-bn",
+  "localeID": "ms_Latn_BN",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-my.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-my.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-my.js
new file mode 100644
index 0000000..b55fbda
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-my.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "PG",
+      "PTG"
+    ],
+    "DAY": [
+      "Ahad",
+      "Isnin",
+      "Selasa",
+      "Rabu",
+      "Khamis",
+      "Jumaat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "S.M.",
+      "TM"
+    ],
+    "ERAS": [
+      "S.M.",
+      "TM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "SHORTDAY": [
+      "Ahd",
+      "Isn",
+      "Sel",
+      "Rab",
+      "Kha",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ogo",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RM",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ms-latn-my",
+  "localeID": "ms_Latn_MY",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-sg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-sg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-sg.js
new file mode 100644
index 0000000..74c1c30
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn-sg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "PG",
+      "PTG"
+    ],
+    "DAY": [
+      "Ahad",
+      "Isnin",
+      "Selasa",
+      "Rabu",
+      "Khamis",
+      "Jumaat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "S.M.",
+      "TM"
+    ],
+    "ERAS": [
+      "S.M.",
+      "TM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "SHORTDAY": [
+      "Ahd",
+      "Isn",
+      "Sel",
+      "Rab",
+      "Kha",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ogo",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ms-latn-sg",
+  "localeID": "ms_Latn_SG",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn.js
new file mode 100644
index 0000000..43a3102
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms-latn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "PG",
+      "PTG"
+    ],
+    "DAY": [
+      "Ahad",
+      "Isnin",
+      "Selasa",
+      "Rabu",
+      "Khamis",
+      "Jumaat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "S.M.",
+      "TM"
+    ],
+    "ERAS": [
+      "S.M.",
+      "TM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "SHORTDAY": [
+      "Ahd",
+      "Isn",
+      "Sel",
+      "Rab",
+      "Kha",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ogo",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RM",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ms-latn",
+  "localeID": "ms_Latn",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms.js
new file mode 100644
index 0000000..14b9b40
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ms.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "PG",
+      "PTG"
+    ],
+    "DAY": [
+      "Ahad",
+      "Isnin",
+      "Selasa",
+      "Rabu",
+      "Khamis",
+      "Jumaat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "S.M.",
+      "TM"
+    ],
+    "ERAS": [
+      "S.M.",
+      "TM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "SHORTDAY": [
+      "Ahd",
+      "Isn",
+      "Sel",
+      "Rab",
+      "Kha",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ogo",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mac",
+      "April",
+      "Mei",
+      "Jun",
+      "Julai",
+      "Ogos",
+      "September",
+      "Oktober",
+      "November",
+      "Disember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RM",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ms",
+  "localeID": "ms",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[04/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab.js
new file mode 100644
index 0000000..2e194fc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"
+    ],
+    "DAY": [
+      "\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5",
+      "\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5",
+      "\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5",
+      "\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5",
+      "\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5",
+      "\u062c\u06c8\u0645\u06d5",
+      "\u0634\u06d5\u0646\u0628\u06d5"
+    ],
+    "ERANAMES": [
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5"
+    ],
+    "ERAS": [
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0628\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "SHORTDAY": [
+      "\u064a\u06d5",
+      "\u062f\u06c8",
+      "\u0633\u06d5",
+      "\u0686\u0627",
+      "\u067e\u06d5",
+      "\u0686\u06c8",
+      "\u0634\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0646\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0628\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c MMMM d\u060c y",
+    "longDate": "MMMM d\u060c y",
+    "medium": "MMM d\u060c y h:mm:ss a",
+    "mediumDate": "MMM d\u060c y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ug-arab",
+  "localeID": "ug_Arab",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug.js
new file mode 100644
index 0000000..698df9a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"
+    ],
+    "DAY": [
+      "\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5",
+      "\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5",
+      "\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5",
+      "\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5",
+      "\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5",
+      "\u062c\u06c8\u0645\u06d5",
+      "\u0634\u06d5\u0646\u0628\u06d5"
+    ],
+    "ERANAMES": [
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5"
+    ],
+    "ERAS": [
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0628\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "SHORTDAY": [
+      "\u064a\u06d5",
+      "\u062f\u06c8",
+      "\u0633\u06d5",
+      "\u0686\u0627",
+      "\u067e\u06d5",
+      "\u0686\u06c8",
+      "\u0634\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0646\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0628\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c MMMM d\u060c y",
+    "longDate": "MMMM d\u060c y",
+    "medium": "MMM d\u060c y h:mm:ss a",
+    "mediumDate": "MMM d\u060c y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ug",
+  "localeID": "ug",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk-ua.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk-ua.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk-ua.js
new file mode 100644
index 0000000..3c8cbaa
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk-ua.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0434\u043f",
+      "\u043f\u043f"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0456\u043b\u044f",
+      "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a",
+      "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a",
+      "\u0441\u0435\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440",
+      "\u043f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438",
+      "\u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438"
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d.\u0435.",
+      "\u043d.\u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0441\u0456\u0447\u043d\u044f",
+      "\u043b\u044e\u0442\u043e\u0433\u043e",
+      "\u0431\u0435\u0440\u0435\u0437\u043d\u044f",
+      "\u043a\u0432\u0456\u0442\u043d\u044f",
+      "\u0442\u0440\u0430\u0432\u043d\u044f",
+      "\u0447\u0435\u0440\u0432\u043d\u044f",
+      "\u043b\u0438\u043f\u043d\u044f",
+      "\u0441\u0435\u0440\u043f\u043d\u044f",
+      "\u0432\u0435\u0440\u0435\u0441\u043d\u044f",
+      "\u0436\u043e\u0432\u0442\u043d\u044f",
+      "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430",
+      "\u0433\u0440\u0443\u0434\u043d\u044f"
+    ],
+    "SHORTDAY": [
+      "\u041d\u0434",
+      "\u041f\u043d",
+      "\u0412\u0442",
+      "\u0421\u0440",
+      "\u0427\u0442",
+      "\u041f\u0442",
+      "\u0421\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0441\u0456\u0447.",
+      "\u043b\u044e\u0442.",
+      "\u0431\u0435\u0440.",
+      "\u043a\u0432\u0456\u0442.",
+      "\u0442\u0440\u0430\u0432.",
+      "\u0447\u0435\u0440\u0432.",
+      "\u043b\u0438\u043f.",
+      "\u0441\u0435\u0440\u043f.",
+      "\u0432\u0435\u0440.",
+      "\u0436\u043e\u0432\u0442.",
+      "\u043b\u0438\u0441\u0442.",
+      "\u0433\u0440\u0443\u0434."
+    ],
+    "STANDALONEMONTH": [
+      "\u0421\u0456\u0447\u0435\u043d\u044c",
+      "\u041b\u044e\u0442\u0438\u0439",
+      "\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c",
+      "\u041a\u0432\u0456\u0442\u0435\u043d\u044c",
+      "\u0422\u0440\u0430\u0432\u0435\u043d\u044c",
+      "\u0427\u0435\u0440\u0432\u0435\u043d\u044c",
+      "\u041b\u0438\u043f\u0435\u043d\u044c",
+      "\u0421\u0435\u0440\u043f\u0435\u043d\u044c",
+      "\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c",
+      "\u0416\u043e\u0432\u0442\u0435\u043d\u044c",
+      "\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434",
+      "\u0413\u0440\u0443\u0434\u0435\u043d\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0440'.",
+    "longDate": "d MMMM y '\u0440'.",
+    "medium": "d MMM y '\u0440'. HH:mm:ss",
+    "mediumDate": "d MMM y '\u0440'.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b4",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "uk-ua",
+  "localeID": "uk_UA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk.js
new file mode 100644
index 0000000..716d244
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0434\u043f",
+      "\u043f\u043f"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0456\u043b\u044f",
+      "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a",
+      "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a",
+      "\u0441\u0435\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440",
+      "\u043f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438",
+      "\u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438"
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d.\u0435.",
+      "\u043d.\u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0441\u0456\u0447\u043d\u044f",
+      "\u043b\u044e\u0442\u043e\u0433\u043e",
+      "\u0431\u0435\u0440\u0435\u0437\u043d\u044f",
+      "\u043a\u0432\u0456\u0442\u043d\u044f",
+      "\u0442\u0440\u0430\u0432\u043d\u044f",
+      "\u0447\u0435\u0440\u0432\u043d\u044f",
+      "\u043b\u0438\u043f\u043d\u044f",
+      "\u0441\u0435\u0440\u043f\u043d\u044f",
+      "\u0432\u0435\u0440\u0435\u0441\u043d\u044f",
+      "\u0436\u043e\u0432\u0442\u043d\u044f",
+      "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430",
+      "\u0433\u0440\u0443\u0434\u043d\u044f"
+    ],
+    "SHORTDAY": [
+      "\u041d\u0434",
+      "\u041f\u043d",
+      "\u0412\u0442",
+      "\u0421\u0440",
+      "\u0427\u0442",
+      "\u041f\u0442",
+      "\u0421\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0441\u0456\u0447.",
+      "\u043b\u044e\u0442.",
+      "\u0431\u0435\u0440.",
+      "\u043a\u0432\u0456\u0442.",
+      "\u0442\u0440\u0430\u0432.",
+      "\u0447\u0435\u0440\u0432.",
+      "\u043b\u0438\u043f.",
+      "\u0441\u0435\u0440\u043f.",
+      "\u0432\u0435\u0440.",
+      "\u0436\u043e\u0432\u0442.",
+      "\u043b\u0438\u0441\u0442.",
+      "\u0433\u0440\u0443\u0434."
+    ],
+    "STANDALONEMONTH": [
+      "\u0421\u0456\u0447\u0435\u043d\u044c",
+      "\u041b\u044e\u0442\u0438\u0439",
+      "\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c",
+      "\u041a\u0432\u0456\u0442\u0435\u043d\u044c",
+      "\u0422\u0440\u0430\u0432\u0435\u043d\u044c",
+      "\u0427\u0435\u0440\u0432\u0435\u043d\u044c",
+      "\u041b\u0438\u043f\u0435\u043d\u044c",
+      "\u0421\u0435\u0440\u043f\u0435\u043d\u044c",
+      "\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c",
+      "\u0416\u043e\u0432\u0442\u0435\u043d\u044c",
+      "\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434",
+      "\u0413\u0440\u0443\u0434\u0435\u043d\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0440'.",
+    "longDate": "d MMMM y '\u0440'.",
+    "medium": "d MMM y '\u0440'. HH:mm:ss",
+    "mediumDate": "d MMM y '\u0440'.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b4",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "uk",
+  "localeID": "uk",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-in.js
new file mode 100644
index 0000000..762a3d8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-in.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631",
+      "\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631"
+    ],
+    "DAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u0633\u0648\u0645\u0648\u0627\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d",
+      "\u0639\u06cc\u0633\u0648\u06cc"
+    ],
+    "ERAS": [
+      "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d",
+      "\u0639\u06cc\u0633\u0648\u06cc"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u0633\u0648\u0645\u0648\u0627\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "d MMM\u060c y h:mm:ss a",
+    "mediumDate": "d MMM\u060c y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ur-in",
+  "localeID": "ur_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-pk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-pk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-pk.js
new file mode 100644
index 0000000..6ab57c0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur-pk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631",
+      "\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631"
+    ],
+    "DAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u0633\u0648\u0645\u0648\u0627\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d",
+      "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646"
+    ],
+    "ERAS": [
+      "\u0642 \u0645",
+      "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u0633\u0648\u0645\u0648\u0627\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "d MMM\u060c y h:mm:ss a",
+    "mediumDate": "d MMM\u060c y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ur-pk",
+  "localeID": "ur_PK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur.js
new file mode 100644
index 0000000..6a950ed
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ur.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631",
+      "\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631"
+    ],
+    "DAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u0633\u0648\u0645\u0648\u0627\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d",
+      "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646"
+    ],
+    "ERAS": [
+      "\u0642 \u0645",
+      "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u0633\u0648\u0645\u0648\u0627\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "d MMM\u060c y h:mm:ss a",
+    "mediumDate": "d MMM\u060c y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ur",
+  "localeID": "ur",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab-af.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab-af.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab-af.js
new file mode 100644
index 0000000..22875a1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab-af.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "ERANAMES": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "ERAS": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0628\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u06cc.",
+      "\u062f.",
+      "\u0633.",
+      "\u0686.",
+      "\u067e.",
+      "\u062c.",
+      "\u0634."
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648",
+      "\u0641\u0628\u0631",
+      "\u0645\u0627\u0631",
+      "\u0627\u067e\u0631",
+      "\u0645\u0640\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644",
+      "\u0627\u06af\u0633",
+      "\u0633\u067e\u062a",
+      "\u0627\u06a9\u062a",
+      "\u0646\u0648\u0645",
+      "\u062f\u0633\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0628\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      3,
+      4
+    ],
+    "fullDate": "y \u0646\u0686\u06cc \u06cc\u06cc\u0644 d \u0646\u0686\u06cc MMMM EEEE \u06a9\u0648\u0646\u06cc",
+    "longDate": "d \u0646\u0686\u06cc MMMM y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "y/M/d H:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Af.",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "uz-arab-af",
+  "localeID": "uz_Arab_AF",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab.js
new file mode 100644
index 0000000..c25ffc7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-arab.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "ERANAMES": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "ERAS": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0628\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u06cc.",
+      "\u062f.",
+      "\u0633.",
+      "\u0686.",
+      "\u067e.",
+      "\u062c.",
+      "\u0634."
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648",
+      "\u0641\u0628\u0631",
+      "\u0645\u0627\u0631",
+      "\u0627\u067e\u0631",
+      "\u0645\u0640\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644",
+      "\u0627\u06af\u0633",
+      "\u0633\u067e\u062a",
+      "\u0627\u06a9\u062a",
+      "\u0646\u0648\u0645",
+      "\u062f\u0633\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0628\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      3,
+      4
+    ],
+    "fullDate": "y \u0646\u0686\u06cc \u06cc\u06cc\u0644 d \u0646\u0686\u06cc MMMM EEEE \u06a9\u0648\u0646\u06cc",
+    "longDate": "d \u0646\u0686\u06cc MMMM y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "y/M/d H:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Af.",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "uz-arab",
+  "localeID": "uz_Arab",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl-uz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl-uz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl-uz.js
new file mode 100644
index 0000000..3f3106a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl-uz.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u044f\u043a\u0448\u0430\u043d\u0431\u0430",
+      "\u0434\u0443\u0448\u0430\u043d\u0431\u0430",
+      "\u0441\u0435\u0448\u0430\u043d\u0431\u0430",
+      "\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0430",
+      "\u043f\u0430\u0439\u0448\u0430\u043d\u0431\u0430",
+      "\u0436\u0443\u043c\u0430",
+      "\u0448\u0430\u043d\u0431\u0430"
+    ],
+    "ERANAMES": [
+      "\u041c.\u0410.",
+      "\u042d"
+    ],
+    "ERAS": [
+      "\u041c.\u0410.",
+      "\u042d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u042f\u043d\u0432\u0430\u0440",
+      "\u0424\u0435\u0432\u0440\u0430\u043b",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440",
+      "\u041e\u043a\u0442\u044f\u0431\u0440",
+      "\u041d\u043e\u044f\u0431\u0440",
+      "\u0414\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "SHORTDAY": [
+      "\u042f\u043a\u0448",
+      "\u0414\u0443\u0448",
+      "\u0421\u0435\u0448",
+      "\u0427\u043e\u0440",
+      "\u041f\u0430\u0439",
+      "\u0416\u0443\u043c",
+      "\u0428\u0430\u043d"
+    ],
+    "SHORTMONTH": [
+      "\u042f\u043d\u0432",
+      "\u0424\u0435\u0432",
+      "\u041c\u0430\u0440",
+      "\u0410\u043f\u0440",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433",
+      "\u0421\u0435\u043d",
+      "\u041e\u043a\u0442",
+      "\u041d\u043e\u044f",
+      "\u0414\u0435\u043a"
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440",
+      "\u0424\u0435\u0432\u0440\u0430\u043b",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440",
+      "\u041e\u043a\u0442\u044f\u0431\u0440",
+      "\u041d\u043e\u044f\u0431\u0440",
+      "\u0414\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "so\u02bcm",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "uz-cyrl-uz",
+  "localeID": "uz_Cyrl_UZ",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl.js
new file mode 100644
index 0000000..824aaa4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-cyrl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u044f\u043a\u0448\u0430\u043d\u0431\u0430",
+      "\u0434\u0443\u0448\u0430\u043d\u0431\u0430",
+      "\u0441\u0435\u0448\u0430\u043d\u0431\u0430",
+      "\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0430",
+      "\u043f\u0430\u0439\u0448\u0430\u043d\u0431\u0430",
+      "\u0436\u0443\u043c\u0430",
+      "\u0448\u0430\u043d\u0431\u0430"
+    ],
+    "ERANAMES": [
+      "\u041c.\u0410.",
+      "\u042d"
+    ],
+    "ERAS": [
+      "\u041c.\u0410.",
+      "\u042d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u042f\u043d\u0432\u0430\u0440",
+      "\u0424\u0435\u0432\u0440\u0430\u043b",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440",
+      "\u041e\u043a\u0442\u044f\u0431\u0440",
+      "\u041d\u043e\u044f\u0431\u0440",
+      "\u0414\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "SHORTDAY": [
+      "\u042f\u043a\u0448",
+      "\u0414\u0443\u0448",
+      "\u0421\u0435\u0448",
+      "\u0427\u043e\u0440",
+      "\u041f\u0430\u0439",
+      "\u0416\u0443\u043c",
+      "\u0428\u0430\u043d"
+    ],
+    "SHORTMONTH": [
+      "\u042f\u043d\u0432",
+      "\u0424\u0435\u0432",
+      "\u041c\u0430\u0440",
+      "\u0410\u043f\u0440",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433",
+      "\u0421\u0435\u043d",
+      "\u041e\u043a\u0442",
+      "\u041d\u043e\u044f",
+      "\u0414\u0435\u043a"
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440",
+      "\u0424\u0435\u0432\u0440\u0430\u043b",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440",
+      "\u041e\u043a\u0442\u044f\u0431\u0440",
+      "\u041d\u043e\u044f\u0431\u0440",
+      "\u0414\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "so\u02bcm",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "uz-cyrl",
+  "localeID": "uz_Cyrl",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn-uz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn-uz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn-uz.js
new file mode 100644
index 0000000..6872728
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn-uz.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "TO",
+      "TK"
+    ],
+    "DAY": [
+      "yakshanba",
+      "dushanba",
+      "seshanba",
+      "chorshanba",
+      "payshanba",
+      "juma",
+      "shanba"
+    ],
+    "ERANAMES": [
+      "M.A.",
+      "E"
+    ],
+    "ERAS": [
+      "M.A.",
+      "E"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avgust",
+      "Sentabr",
+      "Oktabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "SHORTDAY": [
+      "Yaksh",
+      "Dush",
+      "Sesh",
+      "Chor",
+      "Pay",
+      "Jum",
+      "Shan"
+    ],
+    "SHORTMONTH": [
+      "Yanv",
+      "Fev",
+      "Mar",
+      "Apr",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avg",
+      "Sen",
+      "Okt",
+      "Noya",
+      "Dek"
+    ],
+    "STANDALONEMONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avgust",
+      "Sentabr",
+      "Oktabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "so\u02bcm",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "uz-latn-uz",
+  "localeID": "uz_Latn_UZ",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn.js
new file mode 100644
index 0000000..ca53f82
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz-latn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "TO",
+      "TK"
+    ],
+    "DAY": [
+      "yakshanba",
+      "dushanba",
+      "seshanba",
+      "chorshanba",
+      "payshanba",
+      "juma",
+      "shanba"
+    ],
+    "ERANAMES": [
+      "M.A.",
+      "E"
+    ],
+    "ERAS": [
+      "M.A.",
+      "E"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avgust",
+      "Sentabr",
+      "Oktabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "SHORTDAY": [
+      "Yaksh",
+      "Dush",
+      "Sesh",
+      "Chor",
+      "Pay",
+      "Jum",
+      "Shan"
+    ],
+    "SHORTMONTH": [
+      "Yanv",
+      "Fev",
+      "Mar",
+      "Apr",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avg",
+      "Sen",
+      "Okt",
+      "Noya",
+      "Dek"
+    ],
+    "STANDALONEMONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avgust",
+      "Sentabr",
+      "Oktabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "so\u02bcm",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "uz-latn",
+  "localeID": "uz_Latn",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz.js
new file mode 100644
index 0000000..8eb442a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_uz.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "TO",
+      "TK"
+    ],
+    "DAY": [
+      "yakshanba",
+      "dushanba",
+      "seshanba",
+      "chorshanba",
+      "payshanba",
+      "juma",
+      "shanba"
+    ],
+    "ERANAMES": [
+      "M.A.",
+      "E"
+    ],
+    "ERAS": [
+      "M.A.",
+      "E"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avgust",
+      "Sentabr",
+      "Oktabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "SHORTDAY": [
+      "Yaksh",
+      "Dush",
+      "Sesh",
+      "Chor",
+      "Pay",
+      "Jum",
+      "Shan"
+    ],
+    "SHORTMONTH": [
+      "Yanv",
+      "Fev",
+      "Mar",
+      "Apr",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avg",
+      "Sen",
+      "Okt",
+      "Noya",
+      "Dek"
+    ],
+    "STANDALONEMONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "Iyun",
+      "Iyul",
+      "Avgust",
+      "Sentabr",
+      "Oktabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "so\u02bcm",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "uz",
+  "localeID": "uz",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn-lr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn-lr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn-lr.js
new file mode 100644
index 0000000..0800e46
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn-lr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "lahadi",
+      "t\u025b\u025bn\u025b\u025b",
+      "talata",
+      "alaba",
+      "aimisa",
+      "aijima",
+      "si\u0253iti"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "luukao kem\u00e3",
+      "\u0253anda\u0253u",
+      "v\u0254\u0254",
+      "fulu",
+      "goo",
+      "6",
+      "7",
+      "k\u0254nde",
+      "saah",
+      "galo",
+      "kenpkato \u0253olol\u0254",
+      "luukao l\u0254ma"
+    ],
+    "SHORTDAY": [
+      "lahadi",
+      "t\u025b\u025bn\u025b\u025b",
+      "talata",
+      "alaba",
+      "aimisa",
+      "aijima",
+      "si\u0253iti"
+    ],
+    "SHORTMONTH": [
+      "luukao kem\u00e3",
+      "\u0253anda\u0253u",
+      "v\u0254\u0254",
+      "fulu",
+      "goo",
+      "6",
+      "7",
+      "k\u0254nde",
+      "saah",
+      "galo",
+      "kenpkato \u0253olol\u0254",
+      "luukao l\u0254ma"
+    ],
+    "STANDALONEMONTH": [
+      "luukao kem\u00e3",
+      "\u0253anda\u0253u",
+      "v\u0254\u0254",
+      "fulu",
+      "goo",
+      "6",
+      "7",
+      "k\u0254nde",
+      "saah",
+      "galo",
+      "kenpkato \u0253olol\u0254",
+      "luukao l\u0254ma"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vai-latn-lr",
+  "localeID": "vai_Latn_LR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn.js
new file mode 100644
index 0000000..8bb7e49
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "lahadi",
+      "t\u025b\u025bn\u025b\u025b",
+      "talata",
+      "alaba",
+      "aimisa",
+      "aijima",
+      "si\u0253iti"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "luukao kem\u00e3",
+      "\u0253anda\u0253u",
+      "v\u0254\u0254",
+      "fulu",
+      "goo",
+      "6",
+      "7",
+      "k\u0254nde",
+      "saah",
+      "galo",
+      "kenpkato \u0253olol\u0254",
+      "luukao l\u0254ma"
+    ],
+    "SHORTDAY": [
+      "lahadi",
+      "t\u025b\u025bn\u025b\u025b",
+      "talata",
+      "alaba",
+      "aimisa",
+      "aijima",
+      "si\u0253iti"
+    ],
+    "SHORTMONTH": [
+      "luukao kem\u00e3",
+      "\u0253anda\u0253u",
+      "v\u0254\u0254",
+      "fulu",
+      "goo",
+      "6",
+      "7",
+      "k\u0254nde",
+      "saah",
+      "galo",
+      "kenpkato \u0253olol\u0254",
+      "luukao l\u0254ma"
+    ],
+    "STANDALONEMONTH": [
+      "luukao kem\u00e3",
+      "\u0253anda\u0253u",
+      "v\u0254\u0254",
+      "fulu",
+      "goo",
+      "6",
+      "7",
+      "k\u0254nde",
+      "saah",
+      "galo",
+      "kenpkato \u0253olol\u0254",
+      "luukao l\u0254ma"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vai-latn",
+  "localeID": "vai_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii-lr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii-lr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii-lr.js
new file mode 100644
index 0000000..022470e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii-lr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\ua55e\ua54c\ua535",
+      "\ua5f3\ua5e1\ua609",
+      "\ua55a\ua55e\ua55a",
+      "\ua549\ua55e\ua552",
+      "\ua549\ua524\ua546\ua562",
+      "\ua549\ua524\ua540\ua56e",
+      "\ua53b\ua52c\ua533"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "SHORTDAY": [
+      "\ua55e\ua54c\ua535",
+      "\ua5f3\ua5e1\ua609",
+      "\ua55a\ua55e\ua55a",
+      "\ua549\ua55e\ua552",
+      "\ua549\ua524\ua546\ua562",
+      "\ua549\ua524\ua540\ua56e",
+      "\ua53b\ua52c\ua533"
+    ],
+    "SHORTMONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "STANDALONEMONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vai-vaii-lr",
+  "localeID": "vai_Vaii_LR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii.js
new file mode 100644
index 0000000..807b6ae
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai-vaii.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\ua55e\ua54c\ua535",
+      "\ua5f3\ua5e1\ua609",
+      "\ua55a\ua55e\ua55a",
+      "\ua549\ua55e\ua552",
+      "\ua549\ua524\ua546\ua562",
+      "\ua549\ua524\ua540\ua56e",
+      "\ua53b\ua52c\ua533"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "SHORTDAY": [
+      "\ua55e\ua54c\ua535",
+      "\ua5f3\ua5e1\ua609",
+      "\ua55a\ua55e\ua55a",
+      "\ua549\ua55e\ua552",
+      "\ua549\ua524\ua546\ua562",
+      "\ua549\ua524\ua540\ua56e",
+      "\ua53b\ua52c\ua533"
+    ],
+    "SHORTMONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "STANDALONEMONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vai-vaii",
+  "localeID": "vai_Vaii",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai.js
new file mode 100644
index 0000000..36c32ae
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vai.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\ua55e\ua54c\ua535",
+      "\ua5f3\ua5e1\ua609",
+      "\ua55a\ua55e\ua55a",
+      "\ua549\ua55e\ua552",
+      "\ua549\ua524\ua546\ua562",
+      "\ua549\ua524\ua540\ua56e",
+      "\ua53b\ua52c\ua533"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "SHORTDAY": [
+      "\ua55e\ua54c\ua535",
+      "\ua5f3\ua5e1\ua609",
+      "\ua55a\ua55e\ua55a",
+      "\ua549\ua55e\ua552",
+      "\ua549\ua524\ua546\ua562",
+      "\ua549\ua524\ua540\ua56e",
+      "\ua53b\ua52c\ua533"
+    ],
+    "SHORTMONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "STANDALONEMONTH": [
+      "\ua5a8\ua56a\ua583 \ua51e\ua56e",
+      "\ua552\ua561\ua59d\ua595",
+      "\ua57e\ua5ba",
+      "\ua5a2\ua595",
+      "\ua591\ua571",
+      "6",
+      "7",
+      "\ua5db\ua515",
+      "\ua562\ua54c",
+      "\ua56d\ua583",
+      "\ua51e\ua60b\ua554\ua57f \ua578\ua583\ua5cf",
+      "\ua5a8\ua56a\ua571 \ua5cf\ua56e"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vai",
+  "localeID": "vai",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve-za.js
new file mode 100644
index 0000000..eb52630
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve-za.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Swondaha",
+      "Musumbuluwo",
+      "\u1e3cavhuvhili",
+      "\u1e3cavhuraru",
+      "\u1e3cavhu\u1e4ba",
+      "\u1e3cavhu\u1e71anu",
+      "Mugivhela"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Phando",
+      "Luhuhi",
+      "\u1e70hafamuhwe",
+      "Lambamai",
+      "Shundunthule",
+      "Fulwi",
+      "Fulwana",
+      "\u1e70hangule",
+      "Khubvumedzi",
+      "Tshimedzi",
+      "\u1e3cara",
+      "Nyendavhusiku"
+    ],
+    "SHORTDAY": [
+      "Swo",
+      "Mus",
+      "Vhi",
+      "Rar",
+      "\u1e4aa",
+      "\u1e70an",
+      "Mug"
+    ],
+    "SHORTMONTH": [
+      "Pha",
+      "Luh",
+      "\u1e70hf",
+      "Lam",
+      "Shu",
+      "Lwi",
+      "Lwa",
+      "\u1e70ha",
+      "Khu",
+      "Tsh",
+      "\u1e3car",
+      "Nye"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ve-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[10/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-bo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-bo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-bo.js
new file mode 100644
index 0000000..b31aa61
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-bo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Domingo",
+      "Lunes",
+      "Martes",
+      "Mi\u00e9rcoles",
+      "Jueves",
+      "Viernes",
+      "S\u00e1bado"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "d.C."
+    ],
+    "ERAS": [
+      "BCE",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "SHORTDAY": [
+      "Dom",
+      "Lun",
+      "Mar",
+      "Mi\u00e9",
+      "Jue",
+      "Vie",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qul",
+      "Hat",
+      "Pau",
+      "Ayr",
+      "Aym",
+      "Int",
+      "Ant",
+      "Qha",
+      "Uma",
+      "Kan",
+      "Aya",
+      "Kap"
+    ],
+    "STANDALONEMONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d hh:mm:ss a",
+    "mediumDate": "y MMM d",
+    "mediumTime": "hh:mm:ss a",
+    "short": "dd/MM/y hh:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Bs",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "qu-bo",
+  "localeID": "qu_BO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-ec.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-ec.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-ec.js
new file mode 100644
index 0000000..45c55aa
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-ec.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Domingo",
+      "Lunes",
+      "Martes",
+      "Mi\u00e9rcoles",
+      "Jueves",
+      "Viernes",
+      "S\u00e1bado"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "d.C."
+    ],
+    "ERAS": [
+      "BCE",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "SHORTDAY": [
+      "Dom",
+      "Lun",
+      "Mar",
+      "Mi\u00e9",
+      "Jue",
+      "Vie",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qul",
+      "Hat",
+      "Pau",
+      "Ayr",
+      "Aym",
+      "Int",
+      "Ant",
+      "Qha",
+      "Uma",
+      "Kan",
+      "Aya",
+      "Kap"
+    ],
+    "STANDALONEMONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d hh:mm:ss a",
+    "mediumDate": "y MMM d",
+    "mediumTime": "hh:mm:ss a",
+    "short": "dd/MM/y hh:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "qu-ec",
+  "localeID": "qu_EC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-pe.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-pe.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-pe.js
new file mode 100644
index 0000000..32fe7d4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu-pe.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Domingo",
+      "Lunes",
+      "Martes",
+      "Mi\u00e9rcoles",
+      "Jueves",
+      "Viernes",
+      "S\u00e1bado"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "d.C."
+    ],
+    "ERAS": [
+      "BCE",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "SHORTDAY": [
+      "Dom",
+      "Lun",
+      "Mar",
+      "Mi\u00e9",
+      "Jue",
+      "Vie",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qul",
+      "Hat",
+      "Pau",
+      "Ayr",
+      "Aym",
+      "Int",
+      "Ant",
+      "Qha",
+      "Uma",
+      "Kan",
+      "Aya",
+      "Kap"
+    ],
+    "STANDALONEMONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d hh:mm:ss a",
+    "mediumDate": "y MMM d",
+    "mediumTime": "hh:mm:ss a",
+    "short": "dd/MM/y hh:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "S/.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "qu-pe",
+  "localeID": "qu_PE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu.js
new file mode 100644
index 0000000..7b9a9c7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_qu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Domingo",
+      "Lunes",
+      "Martes",
+      "Mi\u00e9rcoles",
+      "Jueves",
+      "Viernes",
+      "S\u00e1bado"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "d.C."
+    ],
+    "ERAS": [
+      "BCE",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "SHORTDAY": [
+      "Dom",
+      "Lun",
+      "Mar",
+      "Mi\u00e9",
+      "Jue",
+      "Vie",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Qul",
+      "Hat",
+      "Pau",
+      "Ayr",
+      "Aym",
+      "Int",
+      "Ant",
+      "Qha",
+      "Uma",
+      "Kan",
+      "Aya",
+      "Kap"
+    ],
+    "STANDALONEMONTH": [
+      "Qulla puquy",
+      "Hatun puquy",
+      "Pauqar waray",
+      "Ayriwa",
+      "Aymuray",
+      "Inti raymi",
+      "Anta Sitwa",
+      "Qhapaq Sitwa",
+      "Uma raymi",
+      "Kantaray",
+      "Ayamarq\u02bca",
+      "Kapaq Raymi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d hh:mm:ss a",
+    "mediumDate": "y MMM d",
+    "mediumTime": "hh:mm:ss a",
+    "short": "dd/MM/y hh:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "S/.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "qu",
+  "localeID": "qu",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm-ch.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm-ch.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm-ch.js
new file mode 100644
index 0000000..4e80899
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm-ch.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "sm"
+    ],
+    "DAY": [
+      "dumengia",
+      "glindesdi",
+      "mardi",
+      "mesemna",
+      "gievgia",
+      "venderdi",
+      "sonda"
+    ],
+    "ERANAMES": [
+      "avant Cristus",
+      "suenter Cristus"
+    ],
+    "ERAS": [
+      "av. Cr.",
+      "s. Cr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "schaner",
+      "favrer",
+      "mars",
+      "avrigl",
+      "matg",
+      "zercladur",
+      "fanadur",
+      "avust",
+      "settember",
+      "october",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "du",
+      "gli",
+      "ma",
+      "me",
+      "gie",
+      "ve",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "schan.",
+      "favr.",
+      "mars",
+      "avr.",
+      "matg",
+      "zercl.",
+      "fan.",
+      "avust",
+      "sett.",
+      "oct.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "schaner",
+      "favrer",
+      "mars",
+      "avrigl",
+      "matg",
+      "zercladur",
+      "fanadur",
+      "avust",
+      "settember",
+      "october",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, 'ils' d 'da' MMMM y",
+    "longDate": "d 'da' MMMM y",
+    "medium": "dd-MM-y HH:mm:ss",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "rm-ch",
+  "localeID": "rm_CH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm.js
new file mode 100644
index 0000000..bb3a11b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "sm"
+    ],
+    "DAY": [
+      "dumengia",
+      "glindesdi",
+      "mardi",
+      "mesemna",
+      "gievgia",
+      "venderdi",
+      "sonda"
+    ],
+    "ERANAMES": [
+      "avant Cristus",
+      "suenter Cristus"
+    ],
+    "ERAS": [
+      "av. Cr.",
+      "s. Cr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "schaner",
+      "favrer",
+      "mars",
+      "avrigl",
+      "matg",
+      "zercladur",
+      "fanadur",
+      "avust",
+      "settember",
+      "october",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "du",
+      "gli",
+      "ma",
+      "me",
+      "gie",
+      "ve",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "schan.",
+      "favr.",
+      "mars",
+      "avr.",
+      "matg",
+      "zercl.",
+      "fan.",
+      "avust",
+      "sett.",
+      "oct.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "schaner",
+      "favrer",
+      "mars",
+      "avrigl",
+      "matg",
+      "zercladur",
+      "fanadur",
+      "avust",
+      "settember",
+      "october",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, 'ils' d 'da' MMMM y",
+    "longDate": "d 'da' MMMM y",
+    "medium": "dd-MM-y HH:mm:ss",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "rm",
+  "localeID": "rm",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn-bi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn-bi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn-bi.js
new file mode 100644
index 0000000..806d589
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn-bi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Z.MU.",
+      "Z.MW."
+    ],
+    "DAY": [
+      "Ku w\u2019indwi",
+      "Ku wa mbere",
+      "Ku wa kabiri",
+      "Ku wa gatatu",
+      "Ku wa kane",
+      "Ku wa gatanu",
+      "Ku wa gatandatu"
+    ],
+    "ERANAMES": [
+      "Mbere ya Yezu",
+      "Nyuma ya Yezu"
+    ],
+    "ERAS": [
+      "Mb.Y.",
+      "Ny.Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Nzero",
+      "Ruhuhuma",
+      "Ntwarante",
+      "Ndamukiza",
+      "Rusama",
+      "Ruheshi",
+      "Mukakaro",
+      "Nyandagaro",
+      "Nyakanga",
+      "Gitugutu",
+      "Munyonyo",
+      "Kigarama"
+    ],
+    "SHORTDAY": [
+      "cu.",
+      "mbe.",
+      "kab.",
+      "gtu.",
+      "kan.",
+      "gnu.",
+      "gnd."
+    ],
+    "SHORTMONTH": [
+      "Mut.",
+      "Gas.",
+      "Wer.",
+      "Mat.",
+      "Gic.",
+      "Kam.",
+      "Nya.",
+      "Kan.",
+      "Nze.",
+      "Ukw.",
+      "Ugu.",
+      "Uku."
+    ],
+    "STANDALONEMONTH": [
+      "Nzero",
+      "Ruhuhuma",
+      "Ntwarante",
+      "Ndamukiza",
+      "Rusama",
+      "Ruheshi",
+      "Mukakaro",
+      "Nyandagaro",
+      "Nyakanga",
+      "Gitugutu",
+      "Munyonyo",
+      "Kigarama"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FBu",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "rn-bi",
+  "localeID": "rn_BI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn.js
new file mode 100644
index 0000000..8dee14c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Z.MU.",
+      "Z.MW."
+    ],
+    "DAY": [
+      "Ku w\u2019indwi",
+      "Ku wa mbere",
+      "Ku wa kabiri",
+      "Ku wa gatatu",
+      "Ku wa kane",
+      "Ku wa gatanu",
+      "Ku wa gatandatu"
+    ],
+    "ERANAMES": [
+      "Mbere ya Yezu",
+      "Nyuma ya Yezu"
+    ],
+    "ERAS": [
+      "Mb.Y.",
+      "Ny.Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Nzero",
+      "Ruhuhuma",
+      "Ntwarante",
+      "Ndamukiza",
+      "Rusama",
+      "Ruheshi",
+      "Mukakaro",
+      "Nyandagaro",
+      "Nyakanga",
+      "Gitugutu",
+      "Munyonyo",
+      "Kigarama"
+    ],
+    "SHORTDAY": [
+      "cu.",
+      "mbe.",
+      "kab.",
+      "gtu.",
+      "kan.",
+      "gnu.",
+      "gnd."
+    ],
+    "SHORTMONTH": [
+      "Mut.",
+      "Gas.",
+      "Wer.",
+      "Mat.",
+      "Gic.",
+      "Kam.",
+      "Nya.",
+      "Kan.",
+      "Nze.",
+      "Ukw.",
+      "Ugu.",
+      "Uku."
+    ],
+    "STANDALONEMONTH": [
+      "Nzero",
+      "Ruhuhuma",
+      "Ntwarante",
+      "Ndamukiza",
+      "Rusama",
+      "Ruheshi",
+      "Mukakaro",
+      "Nyandagaro",
+      "Nyakanga",
+      "Gitugutu",
+      "Munyonyo",
+      "Kigarama"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FBu",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "rn",
+  "localeID": "rn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-md.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-md.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-md.js
new file mode 100644
index 0000000..4bb6f08
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-md.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "duminic\u0103",
+      "luni",
+      "mar\u021bi",
+      "miercuri",
+      "joi",
+      "vineri",
+      "s\u00e2mb\u0103t\u0103"
+    ],
+    "ERANAMES": [
+      "\u00eenainte de Hristos",
+      "dup\u0103 Hristos"
+    ],
+    "ERAS": [
+      "\u00ee.Hr.",
+      "d.Hr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ianuarie",
+      "februarie",
+      "martie",
+      "aprilie",
+      "mai",
+      "iunie",
+      "iulie",
+      "august",
+      "septembrie",
+      "octombrie",
+      "noiembrie",
+      "decembrie"
+    ],
+    "SHORTDAY": [
+      "Dum",
+      "Lun",
+      "Mar",
+      "Mie",
+      "Joi",
+      "Vin",
+      "S\u00e2m"
+    ],
+    "SHORTMONTH": [
+      "ian.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "iun.",
+      "iul.",
+      "aug.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Ianuarie",
+      "Februarie",
+      "Martie",
+      "Aprilie",
+      "Mai",
+      "Iunie",
+      "Iulie",
+      "August",
+      "Septembrie",
+      "Octombrie",
+      "Noiembrie",
+      "Decembrie"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y HH:mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MDL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ro-md",
+  "localeID": "ro_MD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-ro.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-ro.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-ro.js
new file mode 100644
index 0000000..ee84527
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro-ro.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "duminic\u0103",
+      "luni",
+      "mar\u021bi",
+      "miercuri",
+      "joi",
+      "vineri",
+      "s\u00e2mb\u0103t\u0103"
+    ],
+    "ERANAMES": [
+      "\u00eenainte de Hristos",
+      "dup\u0103 Hristos"
+    ],
+    "ERAS": [
+      "\u00ee.Hr.",
+      "d.Hr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ianuarie",
+      "februarie",
+      "martie",
+      "aprilie",
+      "mai",
+      "iunie",
+      "iulie",
+      "august",
+      "septembrie",
+      "octombrie",
+      "noiembrie",
+      "decembrie"
+    ],
+    "SHORTDAY": [
+      "Dum",
+      "Lun",
+      "Mar",
+      "Mie",
+      "Joi",
+      "Vin",
+      "S\u00e2m"
+    ],
+    "SHORTMONTH": [
+      "ian.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "iun.",
+      "iul.",
+      "aug.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Ianuarie",
+      "Februarie",
+      "Martie",
+      "Aprilie",
+      "Mai",
+      "Iunie",
+      "Iulie",
+      "August",
+      "Septembrie",
+      "Octombrie",
+      "Noiembrie",
+      "Decembrie"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y HH:mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RON",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ro-ro",
+  "localeID": "ro_RO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro.js
new file mode 100644
index 0000000..355646e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ro.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "duminic\u0103",
+      "luni",
+      "mar\u021bi",
+      "miercuri",
+      "joi",
+      "vineri",
+      "s\u00e2mb\u0103t\u0103"
+    ],
+    "ERANAMES": [
+      "\u00eenainte de Hristos",
+      "dup\u0103 Hristos"
+    ],
+    "ERAS": [
+      "\u00ee.Hr.",
+      "d.Hr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ianuarie",
+      "februarie",
+      "martie",
+      "aprilie",
+      "mai",
+      "iunie",
+      "iulie",
+      "august",
+      "septembrie",
+      "octombrie",
+      "noiembrie",
+      "decembrie"
+    ],
+    "SHORTDAY": [
+      "Dum",
+      "Lun",
+      "Mar",
+      "Mie",
+      "Joi",
+      "Vin",
+      "S\u00e2m"
+    ],
+    "SHORTMONTH": [
+      "ian.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "iun.",
+      "iul.",
+      "aug.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Ianuarie",
+      "Februarie",
+      "Martie",
+      "Aprilie",
+      "Mai",
+      "Iunie",
+      "Iulie",
+      "August",
+      "Septembrie",
+      "Octombrie",
+      "Noiembrie",
+      "Decembrie"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y HH:mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RON",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ro",
+  "localeID": "ro",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v != 0 || n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof-tz.js
new file mode 100644
index 0000000..bced9f2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "kang\u2019ama",
+      "kingoto"
+    ],
+    "DAY": [
+      "Ijumapili",
+      "Ijumatatu",
+      "Ijumanne",
+      "Ijumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Ijumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Mayesu",
+      "Baada ya Mayesu"
+    ],
+    "ERAS": [
+      "KM",
+      "BM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mweri wa kwanza",
+      "Mweri wa kaili",
+      "Mweri wa katatu",
+      "Mweri wa kaana",
+      "Mweri wa tanu",
+      "Mweri wa sita",
+      "Mweri wa saba",
+      "Mweri wa nane",
+      "Mweri wa tisa",
+      "Mweri wa ikumi",
+      "Mweri wa ikumi na moja",
+      "Mweri wa ikumi na mbili"
+    ],
+    "SHORTDAY": [
+      "Ijp",
+      "Ijt",
+      "Ijn",
+      "Ijtn",
+      "Alh",
+      "Iju",
+      "Ijm"
+    ],
+    "SHORTMONTH": [
+      "M1",
+      "M2",
+      "M3",
+      "M4",
+      "M5",
+      "M6",
+      "M7",
+      "M8",
+      "M9",
+      "M10",
+      "M11",
+      "M12"
+    ],
+    "STANDALONEMONTH": [
+      "Mweri wa kwanza",
+      "Mweri wa kaili",
+      "Mweri wa katatu",
+      "Mweri wa kaana",
+      "Mweri wa tanu",
+      "Mweri wa sita",
+      "Mweri wa saba",
+      "Mweri wa nane",
+      "Mweri wa tisa",
+      "Mweri wa ikumi",
+      "Mweri wa ikumi na moja",
+      "Mweri wa ikumi na mbili"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "rof-tz",
+  "localeID": "rof_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof.js
new file mode 100644
index 0000000..d54daaa
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rof.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "kang\u2019ama",
+      "kingoto"
+    ],
+    "DAY": [
+      "Ijumapili",
+      "Ijumatatu",
+      "Ijumanne",
+      "Ijumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Ijumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Mayesu",
+      "Baada ya Mayesu"
+    ],
+    "ERAS": [
+      "KM",
+      "BM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mweri wa kwanza",
+      "Mweri wa kaili",
+      "Mweri wa katatu",
+      "Mweri wa kaana",
+      "Mweri wa tanu",
+      "Mweri wa sita",
+      "Mweri wa saba",
+      "Mweri wa nane",
+      "Mweri wa tisa",
+      "Mweri wa ikumi",
+      "Mweri wa ikumi na moja",
+      "Mweri wa ikumi na mbili"
+    ],
+    "SHORTDAY": [
+      "Ijp",
+      "Ijt",
+      "Ijn",
+      "Ijtn",
+      "Alh",
+      "Iju",
+      "Ijm"
+    ],
+    "SHORTMONTH": [
+      "M1",
+      "M2",
+      "M3",
+      "M4",
+      "M5",
+      "M6",
+      "M7",
+      "M8",
+      "M9",
+      "M10",
+      "M11",
+      "M12"
+    ],
+    "STANDALONEMONTH": [
+      "Mweri wa kwanza",
+      "Mweri wa kaili",
+      "Mweri wa katatu",
+      "Mweri wa kaana",
+      "Mweri wa tanu",
+      "Mweri wa sita",
+      "Mweri wa saba",
+      "Mweri wa nane",
+      "Mweri wa tisa",
+      "Mweri wa ikumi",
+      "Mweri wa ikumi na moja",
+      "Mweri wa ikumi na mbili"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "rof",
+  "localeID": "rof",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-by.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-by.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-by.js
new file mode 100644
index 0000000..0b45136
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-by.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+      "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+      "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044f",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440\u0435\u043b\u044f",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+      "\u043d\u043e\u044f\u0431\u0440\u044f",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+    ],
+    "SHORTDAY": [
+      "\u0432\u0441",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f\u0431.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d MMM y '\u0433'. H:mm:ss",
+    "mediumDate": "d MMM y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "BYR",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ru-by",
+  "localeID": "ru_BY",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kg.js
new file mode 100644
index 0000000..8d9a6a5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+      "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+      "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044f",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440\u0435\u043b\u044f",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+      "\u043d\u043e\u044f\u0431\u0440\u044f",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+    ],
+    "SHORTDAY": [
+      "\u0432\u0441",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f\u0431.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d MMM y '\u0433'. H:mm:ss",
+    "mediumDate": "d MMM y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KGS",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ru-kg",
+  "localeID": "ru_KG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kz.js
new file mode 100644
index 0000000..0d7072b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-kz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+      "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+      "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044f",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440\u0435\u043b\u044f",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+      "\u043d\u043e\u044f\u0431\u0440\u044f",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+    ],
+    "SHORTDAY": [
+      "\u0432\u0441",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f\u0431.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d MMM y '\u0433'. H:mm:ss",
+    "mediumDate": "d MMM y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b8",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ru-kz",
+  "localeID": "ru_KZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-md.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-md.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-md.js
new file mode 100644
index 0000000..7f1e9aa
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-md.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+      "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+      "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044f",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440\u0435\u043b\u044f",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+      "\u043d\u043e\u044f\u0431\u0440\u044f",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+    ],
+    "SHORTDAY": [
+      "\u0432\u0441",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f\u0431.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d MMM y '\u0433'. H:mm:ss",
+    "mediumDate": "d MMM y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MDL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ru-md",
+  "localeID": "ru_MD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ru.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ru.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ru.js
new file mode 100644
index 0000000..bd249f6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ru.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+      "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+      "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044f",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440\u0435\u043b\u044f",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+      "\u043d\u043e\u044f\u0431\u0440\u044f",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+    ],
+    "SHORTDAY": [
+      "\u0432\u0441",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f\u0431.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d MMM y '\u0433'. H:mm:ss",
+    "mediumDate": "d MMM y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u0440\u0443\u0431.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ru-ru",
+  "localeID": "ru_RU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ua.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ua.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ua.js
new file mode 100644
index 0000000..bbf7b33
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru-ua.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+      "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+      "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044f",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440\u0435\u043b\u044f",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+      "\u043d\u043e\u044f\u0431\u0440\u044f",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+    ],
+    "SHORTDAY": [
+      "\u0432\u0441",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f\u0431.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d MMM y '\u0433'. HH:mm:ss",
+    "mediumDate": "d MMM y '\u0433'.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b4",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ru-ua",
+  "localeID": "ru_UA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru.js
new file mode 100644
index 0000000..1ed06bd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ru.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+      "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+      "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+      "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "ERAS": [
+      "\u0434\u043e \u043d. \u044d.",
+      "\u043d. \u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044f",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440\u0435\u043b\u044f",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+      "\u043d\u043e\u044f\u0431\u0440\u044f",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+    ],
+    "SHORTDAY": [
+      "\u0432\u0441",
+      "\u043f\u043d",
+      "\u0432\u0442",
+      "\u0441\u0440",
+      "\u0447\u0442",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432\u0440.",
+      "\u043c\u0430\u0440\u0442\u0430",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044f",
+      "\u0438\u044e\u043b\u044f",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d\u0442.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f\u0431.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y '\u0433'.",
+    "longDate": "d MMMM y '\u0433'.",
+    "medium": "d MMM y '\u0433'. H:mm:ss",
+    "mediumDate": "d MMM y '\u0433'.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u0440\u0443\u0431.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ru",
+  "localeID": "ru",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i % 10 == 0 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 11 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw-rw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw-rw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw-rw.js
new file mode 100644
index 0000000..1778548
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw-rw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Ku cyumweru",
+      "Kuwa mbere",
+      "Kuwa kabiri",
+      "Kuwa gatatu",
+      "Kuwa kane",
+      "Kuwa gatanu",
+      "Kuwa gatandatu"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mutarama",
+      "Gashyantare",
+      "Werurwe",
+      "Mata",
+      "Gicuransi",
+      "Kamena",
+      "Nyakanga",
+      "Kanama",
+      "Nzeli",
+      "Ukwakira",
+      "Ugushyingo",
+      "Ukuboza"
+    ],
+    "SHORTDAY": [
+      "cyu.",
+      "mbe.",
+      "kab.",
+      "gtu.",
+      "kan.",
+      "gnu.",
+      "gnd."
+    ],
+    "SHORTMONTH": [
+      "mut.",
+      "gas.",
+      "wer.",
+      "mat.",
+      "gic.",
+      "kam.",
+      "nya.",
+      "kan.",
+      "nze.",
+      "ukw.",
+      "ugu.",
+      "uku."
+    ],
+    "STANDALONEMONTH": [
+      "Mutarama",
+      "Gashyantare",
+      "Werurwe",
+      "Mata",
+      "Gicuransi",
+      "Kamena",
+      "Nyakanga",
+      "Kanama",
+      "Nzeli",
+      "Ukwakira",
+      "Ugushyingo",
+      "Ukuboza"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RF",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "rw-rw",
+  "localeID": "rw_RW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[51/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
WW-4316 Moves Struts archetypes into its own repo


Project: http://git-wip-us.apache.org/repos/asf/struts-archetypes/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts-archetypes/commit/3662396a
Tree: http://git-wip-us.apache.org/repos/asf/struts-archetypes/tree/3662396a
Diff: http://git-wip-us.apache.org/repos/asf/struts-archetypes/diff/3662396a

Branch: refs/heads/master
Commit: 3662396ad0b29ec2d49593e1cc4d3e8dacc906da
Parents: 89f1d38
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Thu Jul 14 19:56:51 2016 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Thu Jul 14 19:56:53 2016 +0200

----------------------------------------------------------------------
 pom.xml                                         |    64 +
 struts2-archetype-angularjs/README.txt          |    61 +
 struts2-archetype-angularjs/pom.xml             |    86 +
 .../META-INF/maven/archetype-metadata.xml       |    68 +
 .../main/resources/META-INF/maven/archetype.xml |     7 +
 .../resources/archetype-resources/LICENSE.txt   |   174 +
 .../resources/archetype-resources/NOTICE.txt    |     6 +
 .../main/resources/archetype-resources/pom.xml  |   177 +
 .../src/main/java/actions/Index.java            |    42 +
 .../main/java/actions/data/ProjectsAction.java  |    72 +
 .../main/java/actions/data/package-info.java    |    24 +
 .../src/main/resources/jshint.conf.js           |    13 +
 .../src/main/resources/log4j2.xml               |    16 +
 .../src/main/resources/package.properties       |     1 +
 .../src/main/resources/package_es.properties    |     1 +
 .../src/main/resources/struts.xml               |    16 +
 .../src/main/webapp/WEB-INF/content/index.jsp   |    38 +
 .../src/main/webapp/WEB-INF/web.xml             |    20 +
 .../src/main/webapp/index.jsp                   |     1 +
 .../src/main/webapp/js/app.js                   |    26 +
 .../src/main/webapp/js/config.js                |    40 +
 .../js/controllers/ApacheProjectsController.js  |    40 +
 .../main/webapp/js/controllers/AppController.js |    29 +
 .../webapp/js/controllers/HomeController.js     |    30 +
 .../webapp/js/lib/angular/angular-animate.js    |  4121 ++
 .../js/lib/angular/angular-animate.min.js       |    56 +
 .../js/lib/angular/angular-animate.min.js.map   |     8 +
 .../main/webapp/js/lib/angular/angular-aria.js  |   398 +
 .../webapp/js/lib/angular/angular-aria.min.js   |    14 +
 .../js/lib/angular/angular-aria.min.js.map      |     8 +
 .../webapp/js/lib/angular/angular-cookies.js    |   322 +
 .../js/lib/angular/angular-cookies.min.js       |     9 +
 .../js/lib/angular/angular-cookies.min.js.map   |     8 +
 .../main/webapp/js/lib/angular/angular-csp.css  |    21 +
 .../webapp/js/lib/angular/angular-loader.js     |   484 +
 .../webapp/js/lib/angular/angular-loader.min.js |    10 +
 .../js/lib/angular/angular-loader.min.js.map    |     8 +
 .../js/lib/angular/angular-message-format.js    |   980 +
 .../lib/angular/angular-message-format.min.js   |    26 +
 .../angular/angular-message-format.min.js.map   |     8 +
 .../webapp/js/lib/angular/angular-messages.js   |   687 +
 .../js/lib/angular/angular-messages.min.js      |    12 +
 .../js/lib/angular/angular-messages.min.js.map  |     8 +
 .../main/webapp/js/lib/angular/angular-mocks.js |  2842 ++
 .../webapp/js/lib/angular/angular-resource.js   |   768 +
 .../js/lib/angular/angular-resource.min.js      |    15 +
 .../js/lib/angular/angular-resource.min.js.map  |     8 +
 .../main/webapp/js/lib/angular/angular-route.js |  1016 +
 .../webapp/js/lib/angular/angular-route.min.js  |    15 +
 .../js/lib/angular/angular-route.min.js.map     |     8 +
 .../webapp/js/lib/angular/angular-sanitize.js   |   717 +
 .../js/lib/angular/angular-sanitize.min.js      |    15 +
 .../js/lib/angular/angular-sanitize.min.js.map  |     8 +
 .../webapp/js/lib/angular/angular-scenario.js   | 41849 +++++++++++++++++
 .../main/webapp/js/lib/angular/angular-touch.js |   729 +
 .../webapp/js/lib/angular/angular-touch.min.js  |    14 +
 .../js/lib/angular/angular-touch.min.js.map     |     8 +
 .../src/main/webapp/js/lib/angular/angular.js   | 30428 ++++++++++++
 .../main/webapp/js/lib/angular/angular.min.js   |   307 +
 .../webapp/js/lib/angular/angular.min.js.map    |     8 +
 .../src/main/webapp/js/lib/angular/errors.json  |     1 +
 .../js/lib/angular/i18n/angular-locale_aa-dj.js |   128 +
 .../js/lib/angular/i18n/angular-locale_aa-er.js |   128 +
 .../js/lib/angular/i18n/angular-locale_aa-et.js |   128 +
 .../js/lib/angular/i18n/angular-locale_aa.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_af-na.js |   125 +
 .../js/lib/angular/i18n/angular-locale_af-za.js |   125 +
 .../js/lib/angular/i18n/angular-locale_af.js    |   125 +
 .../lib/angular/i18n/angular-locale_agq-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_agq.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ak-gh.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ak.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_am-et.js |   125 +
 .../js/lib/angular/i18n/angular-locale_am.js    |   125 +
 .../lib/angular/i18n/angular-locale_ar-001.js   |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-ae.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-bh.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-dj.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-dz.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-eg.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-eh.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-er.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-il.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-iq.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-jo.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-km.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-kw.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-lb.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-ly.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-ma.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-mr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-om.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-ps.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-qa.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-sa.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-sd.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-so.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-ss.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-sy.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-td.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-tn.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar-ye.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ar.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_as-in.js |   143 +
 .../js/lib/angular/i18n/angular-locale_as.js    |   143 +
 .../lib/angular/i18n/angular-locale_asa-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_asa.js   |   143 +
 .../lib/angular/i18n/angular-locale_ast-es.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ast.js   |   143 +
 .../angular/i18n/angular-locale_az-cyrl-az.js   |   125 +
 .../lib/angular/i18n/angular-locale_az-cyrl.js  |   125 +
 .../angular/i18n/angular-locale_az-latn-az.js   |   125 +
 .../lib/angular/i18n/angular-locale_az-latn.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_az.js    |   125 +
 .../lib/angular/i18n/angular-locale_bas-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_bas.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_be-by.js |   125 +
 .../js/lib/angular/i18n/angular-locale_be.js    |   125 +
 .../lib/angular/i18n/angular-locale_bem-zm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_bem.js   |   143 +
 .../lib/angular/i18n/angular-locale_bez-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_bez.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_bg-bg.js |   125 +
 .../js/lib/angular/i18n/angular-locale_bg.js    |   125 +
 .../angular/i18n/angular-locale_bm-latn-ml.js   |   143 +
 .../lib/angular/i18n/angular-locale_bm-latn.js  |   143 +
 .../js/lib/angular/i18n/angular-locale_bm-ml.js |   115 +
 .../js/lib/angular/i18n/angular-locale_bm.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_bn-bd.js |   125 +
 .../js/lib/angular/i18n/angular-locale_bn-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_bn.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_bo-cn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_bo-in.js |   143 +
 .../js/lib/angular/i18n/angular-locale_bo.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_br-fr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_br.js    |   125 +
 .../lib/angular/i18n/angular-locale_brx-in.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_brx.js   |   143 +
 .../angular/i18n/angular-locale_bs-cyrl-ba.js   |   143 +
 .../lib/angular/i18n/angular-locale_bs-cyrl.js  |   143 +
 .../angular/i18n/angular-locale_bs-latn-ba.js   |   143 +
 .../lib/angular/i18n/angular-locale_bs-latn.js  |   143 +
 .../js/lib/angular/i18n/angular-locale_bs.js    |   143 +
 .../lib/angular/i18n/angular-locale_byn-er.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_byn.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_ca-ad.js |   143 +
 .../i18n/angular-locale_ca-es-valencia.js       |   143 +
 .../js/lib/angular/i18n/angular-locale_ca-es.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ca-fr.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ca-it.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ca.js    |   143 +
 .../lib/angular/i18n/angular-locale_cgg-ug.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_cgg.js   |   143 +
 .../lib/angular/i18n/angular-locale_chr-us.js   |   125 +
 .../js/lib/angular/i18n/angular-locale_chr.js   |   125 +
 .../angular/i18n/angular-locale_ckb-arab-iq.js  |   143 +
 .../angular/i18n/angular-locale_ckb-arab-ir.js  |   143 +
 .../lib/angular/i18n/angular-locale_ckb-arab.js |   143 +
 .../lib/angular/i18n/angular-locale_ckb-iq.js   |   143 +
 .../lib/angular/i18n/angular-locale_ckb-ir.js   |   143 +
 .../angular/i18n/angular-locale_ckb-latn-iq.js  |   143 +
 .../lib/angular/i18n/angular-locale_ckb-latn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ckb.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_cs-cz.js |   143 +
 .../js/lib/angular/i18n/angular-locale_cs.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_cy-gb.js |   125 +
 .../js/lib/angular/i18n/angular-locale_cy.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_da-dk.js |   156 +
 .../js/lib/angular/i18n/angular-locale_da-gl.js |   156 +
 .../js/lib/angular/i18n/angular-locale_da.js    |   156 +
 .../lib/angular/i18n/angular-locale_dav-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_dav.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_de-at.js |   143 +
 .../js/lib/angular/i18n/angular-locale_de-be.js |   143 +
 .../js/lib/angular/i18n/angular-locale_de-ch.js |   143 +
 .../js/lib/angular/i18n/angular-locale_de-de.js |   143 +
 .../js/lib/angular/i18n/angular-locale_de-li.js |   143 +
 .../js/lib/angular/i18n/angular-locale_de-lu.js |   143 +
 .../js/lib/angular/i18n/angular-locale_de.js    |   143 +
 .../lib/angular/i18n/angular-locale_dje-ne.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_dje.js   |   143 +
 .../lib/angular/i18n/angular-locale_dsb-de.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_dsb.js   |   143 +
 .../lib/angular/i18n/angular-locale_dua-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_dua.js   |   143 +
 .../lib/angular/i18n/angular-locale_dyo-sn.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_dyo.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_dz-bt.js |   143 +
 .../js/lib/angular/i18n/angular-locale_dz.js    |   143 +
 .../lib/angular/i18n/angular-locale_ebu-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ebu.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ee-gh.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ee-tg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ee.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_el-cy.js |   125 +
 .../js/lib/angular/i18n/angular-locale_el-gr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_el.js    |   125 +
 .../lib/angular/i18n/angular-locale_en-001.js   |   143 +
 .../lib/angular/i18n/angular-locale_en-150.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ag.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ai.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-as.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-au.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-bb.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-be.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-bm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-bs.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-bw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-bz.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ca.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-cc.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ck.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-cm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-cx.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-dg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-dm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-er.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-fj.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-fk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-fm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gb.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gd.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gh.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gi.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gu.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-gy.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-hk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ie.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-im.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-in.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-io.js |   143 +
 .../lib/angular/i18n/angular-locale_en-iso.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_en-je.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-jm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ke.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ki.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-kn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ky.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-lc.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-lr.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ls.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-mg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-mh.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-mo.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-mp.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ms.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-mt.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-mu.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-mw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-my.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-na.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-nf.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ng.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-nr.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-nu.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-nz.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-pg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ph.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-pk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-pn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-pr.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-pw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-rw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sb.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sc.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sd.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sh.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sl.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ss.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sx.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-sz.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-tc.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-tk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-to.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-tt.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-tv.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-tz.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ug.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-um.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-us.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-vc.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-vg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-vi.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-vu.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-ws.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-za.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-zm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en-zw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_en.js    |   143 +
 .../lib/angular/i18n/angular-locale_eo-001.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_eo.js    |   143 +
 .../lib/angular/i18n/angular-locale_es-419.js   |   125 +
 .../js/lib/angular/i18n/angular-locale_es-ar.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-bo.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-cl.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-co.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-cr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-cu.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-do.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-ea.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-ec.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-es.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-gq.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-gt.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-hn.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-ic.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-mx.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-ni.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-pa.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-pe.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-ph.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-pr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-py.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-sv.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-us.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-uy.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es-ve.js |   125 +
 .../js/lib/angular/i18n/angular-locale_es.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_et-ee.js |   143 +
 .../js/lib/angular/i18n/angular-locale_et.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_eu-es.js |   125 +
 .../js/lib/angular/i18n/angular-locale_eu.js    |   125 +
 .../lib/angular/i18n/angular-locale_ewo-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ewo.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_fa-af.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fa-ir.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fa.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_ff-cm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ff-gn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ff-mr.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ff-sn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ff.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_fi-fi.js |   143 +
 .../js/lib/angular/i18n/angular-locale_fi.js    |   143 +
 .../lib/angular/i18n/angular-locale_fil-ph.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_fil.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_fo-fo.js |   143 +
 .../js/lib/angular/i18n/angular-locale_fo.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_fr-be.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-bf.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-bi.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-bj.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-bl.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ca.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-cd.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-cf.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-cg.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ch.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ci.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-cm.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-dj.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-dz.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-fr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ga.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-gf.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-gn.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-gp.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-gq.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ht.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-km.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-lu.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ma.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-mc.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-mf.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-mg.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ml.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-mq.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-mr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-mu.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-nc.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-ne.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-pf.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-pm.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-re.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-rw.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-sc.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-sn.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-sy.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-td.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-tg.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-tn.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-vu.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-wf.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr-yt.js |   125 +
 .../js/lib/angular/i18n/angular-locale_fr.js    |   125 +
 .../lib/angular/i18n/angular-locale_fur-it.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_fur.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_fy-nl.js |   143 +
 .../js/lib/angular/i18n/angular-locale_fy.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ga-ie.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ga.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_gd-gb.js |   143 +
 .../js/lib/angular/i18n/angular-locale_gd.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_gl-es.js |   143 +
 .../js/lib/angular/i18n/angular-locale_gl.js    |   143 +
 .../lib/angular/i18n/angular-locale_gsw-ch.js   |   125 +
 .../lib/angular/i18n/angular-locale_gsw-fr.js   |   125 +
 .../lib/angular/i18n/angular-locale_gsw-li.js   |   125 +
 .../js/lib/angular/i18n/angular-locale_gsw.js   |   125 +
 .../js/lib/angular/i18n/angular-locale_gu-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_gu.js    |   125 +
 .../lib/angular/i18n/angular-locale_guz-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_guz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_gv-im.js |   143 +
 .../js/lib/angular/i18n/angular-locale_gv.js    |   143 +
 .../angular/i18n/angular-locale_ha-latn-gh.js   |   143 +
 .../angular/i18n/angular-locale_ha-latn-ne.js   |   143 +
 .../angular/i18n/angular-locale_ha-latn-ng.js   |   143 +
 .../lib/angular/i18n/angular-locale_ha-latn.js  |   143 +
 .../js/lib/angular/i18n/angular-locale_ha.js    |   143 +
 .../lib/angular/i18n/angular-locale_haw-us.js   |   125 +
 .../js/lib/angular/i18n/angular-locale_haw.js   |   125 +
 .../js/lib/angular/i18n/angular-locale_he-il.js |   143 +
 .../js/lib/angular/i18n/angular-locale_he.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_hi-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_hi.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_hr-ba.js |   143 +
 .../js/lib/angular/i18n/angular-locale_hr-hr.js |   143 +
 .../js/lib/angular/i18n/angular-locale_hr.js    |   143 +
 .../lib/angular/i18n/angular-locale_hsb-de.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_hsb.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_hu-hu.js |   125 +
 .../js/lib/angular/i18n/angular-locale_hu.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_hy-am.js |   125 +
 .../js/lib/angular/i18n/angular-locale_hy.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_ia-fr.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ia.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_id-id.js |   125 +
 .../js/lib/angular/i18n/angular-locale_id.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_ig-ng.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ig.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ii-cn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ii.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_in.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_is-is.js |   156 +
 .../js/lib/angular/i18n/angular-locale_is.js    |   156 +
 .../js/lib/angular/i18n/angular-locale_it-ch.js |   143 +
 .../js/lib/angular/i18n/angular-locale_it-it.js |   143 +
 .../js/lib/angular/i18n/angular-locale_it-sm.js |   143 +
 .../js/lib/angular/i18n/angular-locale_it.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_iw.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ja-jp.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ja.js    |   125 +
 .../lib/angular/i18n/angular-locale_jgo-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_jgo.js   |   143 +
 .../lib/angular/i18n/angular-locale_jmc-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_jmc.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ka-ge.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ka.js    |   125 +
 .../lib/angular/i18n/angular-locale_kab-dz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kab.js   |   143 +
 .../lib/angular/i18n/angular-locale_kam-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kam.js   |   143 +
 .../lib/angular/i18n/angular-locale_kde-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kde.js   |   143 +
 .../lib/angular/i18n/angular-locale_kea-cv.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kea.js   |   143 +
 .../lib/angular/i18n/angular-locale_khq-ml.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_khq.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ki-ke.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ki.js    |   143 +
 .../angular/i18n/angular-locale_kk-cyrl-kz.js   |   125 +
 .../lib/angular/i18n/angular-locale_kk-cyrl.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_kk.js    |   125 +
 .../lib/angular/i18n/angular-locale_kkj-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kkj.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kl-gl.js |   143 +
 .../js/lib/angular/i18n/angular-locale_kl.js    |   143 +
 .../lib/angular/i18n/angular-locale_kln-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kln.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_km-kh.js |   125 +
 .../js/lib/angular/i18n/angular-locale_km.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_kn-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_kn.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_ko-kp.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ko-kr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ko.js    |   125 +
 .../lib/angular/i18n/angular-locale_kok-in.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kok.js   |   143 +
 .../angular/i18n/angular-locale_ks-arab-in.js   |   143 +
 .../lib/angular/i18n/angular-locale_ks-arab.js  |   143 +
 .../js/lib/angular/i18n/angular-locale_ks.js    |   143 +
 .../lib/angular/i18n/angular-locale_ksb-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ksb.js   |   143 +
 .../lib/angular/i18n/angular-locale_ksf-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ksf.js   |   143 +
 .../lib/angular/i18n/angular-locale_ksh-de.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ksh.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_kw-gb.js |   143 +
 .../js/lib/angular/i18n/angular-locale_kw.js    |   143 +
 .../angular/i18n/angular-locale_ky-cyrl-kg.js   |   125 +
 .../lib/angular/i18n/angular-locale_ky-cyrl.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_ky.js    |   125 +
 .../lib/angular/i18n/angular-locale_lag-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_lag.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_lb-lu.js |   143 +
 .../js/lib/angular/i18n/angular-locale_lb.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_lg-ug.js |   143 +
 .../js/lib/angular/i18n/angular-locale_lg.js    |   143 +
 .../lib/angular/i18n/angular-locale_lkt-us.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_lkt.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ln-ao.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ln-cd.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ln-cf.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ln-cg.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ln.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_lo-la.js |   125 +
 .../js/lib/angular/i18n/angular-locale_lo.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_lt-lt.js |   143 +
 .../js/lib/angular/i18n/angular-locale_lt.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_lu-cd.js |   143 +
 .../js/lib/angular/i18n/angular-locale_lu.js    |   143 +
 .../lib/angular/i18n/angular-locale_luo-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_luo.js   |   143 +
 .../lib/angular/i18n/angular-locale_luy-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_luy.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_lv-lv.js |   143 +
 .../js/lib/angular/i18n/angular-locale_lv.js    |   143 +
 .../lib/angular/i18n/angular-locale_mas-ke.js   |   143 +
 .../lib/angular/i18n/angular-locale_mas-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mas.js   |   143 +
 .../lib/angular/i18n/angular-locale_mer-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mer.js   |   143 +
 .../lib/angular/i18n/angular-locale_mfe-mu.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mfe.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mg-mg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_mg.js    |   143 +
 .../lib/angular/i18n/angular-locale_mgh-mz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mgh.js   |   143 +
 .../lib/angular/i18n/angular-locale_mgo-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mgo.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mk-mk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_mk.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ml-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ml.js    |   125 +
 .../angular/i18n/angular-locale_mn-cyrl-mn.js   |   125 +
 .../lib/angular/i18n/angular-locale_mn-cyrl.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_mn.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_mr-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_mr.js    |   125 +
 .../angular/i18n/angular-locale_ms-latn-bn.js   |   125 +
 .../angular/i18n/angular-locale_ms-latn-my.js   |   125 +
 .../angular/i18n/angular-locale_ms-latn-sg.js   |   125 +
 .../lib/angular/i18n/angular-locale_ms-latn.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_ms.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_mt-mt.js |   125 +
 .../js/lib/angular/i18n/angular-locale_mt.js    |   125 +
 .../lib/angular/i18n/angular-locale_mua-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_mua.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_my-mm.js |   125 +
 .../js/lib/angular/i18n/angular-locale_my.js    |   125 +
 .../lib/angular/i18n/angular-locale_naq-na.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_naq.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_nb-no.js |   125 +
 .../js/lib/angular/i18n/angular-locale_nb-sj.js |   125 +
 .../js/lib/angular/i18n/angular-locale_nb.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_nd-zw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nd.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ne-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ne-np.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ne.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_nl-aw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nl-be.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nl-bq.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nl-cw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nl-nl.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nl-sr.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nl-sx.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nl.js    |   143 +
 .../lib/angular/i18n/angular-locale_nmg-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_nmg.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_nn-no.js |   143 +
 .../js/lib/angular/i18n/angular-locale_nn.js    |   143 +
 .../lib/angular/i18n/angular-locale_nnh-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_nnh.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_no-no.js |   125 +
 .../js/lib/angular/i18n/angular-locale_no.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_nr-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_nr.js    |   128 +
 .../lib/angular/i18n/angular-locale_nso-za.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_nso.js   |   128 +
 .../lib/angular/i18n/angular-locale_nus-sd.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_nus.js   |   143 +
 .../lib/angular/i18n/angular-locale_nyn-ug.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_nyn.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_om-et.js |   143 +
 .../js/lib/angular/i18n/angular-locale_om-ke.js |   143 +
 .../js/lib/angular/i18n/angular-locale_om.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_or-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_or.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_os-ge.js |   143 +
 .../js/lib/angular/i18n/angular-locale_os-ru.js |   143 +
 .../js/lib/angular/i18n/angular-locale_os.js    |   143 +
 .../angular/i18n/angular-locale_pa-arab-pk.js   |   125 +
 .../lib/angular/i18n/angular-locale_pa-arab.js  |   125 +
 .../angular/i18n/angular-locale_pa-guru-in.js   |   125 +
 .../lib/angular/i18n/angular-locale_pa-guru.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_pa.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_pl-pl.js |   143 +
 .../js/lib/angular/i18n/angular-locale_pl.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ps-af.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ps.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_pt-ao.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-br.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-cv.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-gw.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-mo.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-mz.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-pt.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-st.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt-tl.js |   125 +
 .../js/lib/angular/i18n/angular-locale_pt.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_qu-bo.js |   143 +
 .../js/lib/angular/i18n/angular-locale_qu-ec.js |   143 +
 .../js/lib/angular/i18n/angular-locale_qu-pe.js |   143 +
 .../js/lib/angular/i18n/angular-locale_qu.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_rm-ch.js |   143 +
 .../js/lib/angular/i18n/angular-locale_rm.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_rn-bi.js |   143 +
 .../js/lib/angular/i18n/angular-locale_rn.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ro-md.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ro-ro.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ro.js    |   143 +
 .../lib/angular/i18n/angular-locale_rof-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_rof.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ru-by.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ru-kg.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ru-kz.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ru-md.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ru-ru.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ru-ua.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ru.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_rw-rw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_rw.js    |   143 +
 .../lib/angular/i18n/angular-locale_rwk-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_rwk.js   |   143 +
 .../lib/angular/i18n/angular-locale_sah-ru.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_sah.js   |   143 +
 .../lib/angular/i18n/angular-locale_saq-ke.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_saq.js   |   143 +
 .../lib/angular/i18n/angular-locale_sbp-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_sbp.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_se-fi.js |   143 +
 .../js/lib/angular/i18n/angular-locale_se-no.js |   143 +
 .../js/lib/angular/i18n/angular-locale_se-se.js |   143 +
 .../js/lib/angular/i18n/angular-locale_se.js    |   143 +
 .../lib/angular/i18n/angular-locale_seh-mz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_seh.js   |   143 +
 .../lib/angular/i18n/angular-locale_ses-ml.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ses.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_sg-cf.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sg.js    |   143 +
 .../angular/i18n/angular-locale_shi-latn-ma.js  |   143 +
 .../lib/angular/i18n/angular-locale_shi-latn.js |   143 +
 .../angular/i18n/angular-locale_shi-tfng-ma.js  |   143 +
 .../lib/angular/i18n/angular-locale_shi-tfng.js |   143 +
 .../js/lib/angular/i18n/angular-locale_shi.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_si-lk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_si.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_sk-sk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sk.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_sl-si.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sl.js    |   143 +
 .../lib/angular/i18n/angular-locale_smn-fi.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_smn.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_sn-zw.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sn.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_so-dj.js |   143 +
 .../js/lib/angular/i18n/angular-locale_so-et.js |   143 +
 .../js/lib/angular/i18n/angular-locale_so-ke.js |   143 +
 .../js/lib/angular/i18n/angular-locale_so-so.js |   143 +
 .../js/lib/angular/i18n/angular-locale_so.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_sq-al.js |   125 +
 .../js/lib/angular/i18n/angular-locale_sq-mk.js |   125 +
 .../js/lib/angular/i18n/angular-locale_sq-xk.js |   125 +
 .../js/lib/angular/i18n/angular-locale_sq.js    |   125 +
 .../angular/i18n/angular-locale_sr-cyrl-ba.js   |   143 +
 .../angular/i18n/angular-locale_sr-cyrl-me.js   |   143 +
 .../angular/i18n/angular-locale_sr-cyrl-rs.js   |   143 +
 .../angular/i18n/angular-locale_sr-cyrl-xk.js   |   143 +
 .../lib/angular/i18n/angular-locale_sr-cyrl.js  |   143 +
 .../angular/i18n/angular-locale_sr-latn-ba.js   |   143 +
 .../angular/i18n/angular-locale_sr-latn-me.js   |   143 +
 .../angular/i18n/angular-locale_sr-latn-rs.js   |   143 +
 .../angular/i18n/angular-locale_sr-latn-xk.js   |   143 +
 .../lib/angular/i18n/angular-locale_sr-latn.js  |   143 +
 .../js/lib/angular/i18n/angular-locale_sr.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ss-sz.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ss-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ss.js    |   128 +
 .../lib/angular/i18n/angular-locale_ssy-er.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ssy.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_st-ls.js |   115 +
 .../js/lib/angular/i18n/angular-locale_st-za.js |   115 +
 .../js/lib/angular/i18n/angular-locale_st.js    |   115 +
 .../js/lib/angular/i18n/angular-locale_sv-ax.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sv-fi.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sv-se.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sv.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_sw-cd.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sw-ke.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sw-tz.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sw-ug.js |   143 +
 .../js/lib/angular/i18n/angular-locale_sw.js    |   143 +
 .../lib/angular/i18n/angular-locale_swc-cd.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_swc.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_ta-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ta-lk.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ta-my.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ta-sg.js |   125 +
 .../js/lib/angular/i18n/angular-locale_ta.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_te-in.js |   125 +
 .../js/lib/angular/i18n/angular-locale_te.js    |   125 +
 .../lib/angular/i18n/angular-locale_teo-ke.js   |   143 +
 .../lib/angular/i18n/angular-locale_teo-ug.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_teo.js   |   143 +
 .../angular/i18n/angular-locale_tg-cyrl-tj.js   |   115 +
 .../lib/angular/i18n/angular-locale_tg-cyrl.js  |   115 +
 .../js/lib/angular/i18n/angular-locale_tg.js    |   115 +
 .../js/lib/angular/i18n/angular-locale_th-th.js |   125 +
 .../js/lib/angular/i18n/angular-locale_th.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_ti-er.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ti-et.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ti.js    |   143 +
 .../lib/angular/i18n/angular-locale_tig-er.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_tig.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_tl.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_tn-bw.js |   128 +
 .../js/lib/angular/i18n/angular-locale_tn-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_tn.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_to-to.js |   143 +
 .../js/lib/angular/i18n/angular-locale_to.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_tr-cy.js |   125 +
 .../js/lib/angular/i18n/angular-locale_tr-tr.js |   125 +
 .../js/lib/angular/i18n/angular-locale_tr.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_ts-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ts.js    |   128 +
 .../lib/angular/i18n/angular-locale_twq-ne.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_twq.js   |   143 +
 .../angular/i18n/angular-locale_tzm-latn-ma.js  |   143 +
 .../lib/angular/i18n/angular-locale_tzm-latn.js |   143 +
 .../js/lib/angular/i18n/angular-locale_tzm.js   |   143 +
 .../angular/i18n/angular-locale_ug-arab-cn.js   |   143 +
 .../lib/angular/i18n/angular-locale_ug-arab.js  |   143 +
 .../js/lib/angular/i18n/angular-locale_ug.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_uk-ua.js |   143 +
 .../js/lib/angular/i18n/angular-locale_uk.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_ur-in.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ur-pk.js |   143 +
 .../js/lib/angular/i18n/angular-locale_ur.js    |   143 +
 .../angular/i18n/angular-locale_uz-arab-af.js   |   125 +
 .../lib/angular/i18n/angular-locale_uz-arab.js  |   125 +
 .../angular/i18n/angular-locale_uz-cyrl-uz.js   |   125 +
 .../lib/angular/i18n/angular-locale_uz-cyrl.js  |   125 +
 .../angular/i18n/angular-locale_uz-latn-uz.js   |   125 +
 .../lib/angular/i18n/angular-locale_uz-latn.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_uz.js    |   125 +
 .../angular/i18n/angular-locale_vai-latn-lr.js  |   143 +
 .../lib/angular/i18n/angular-locale_vai-latn.js |   143 +
 .../angular/i18n/angular-locale_vai-vaii-lr.js  |   143 +
 .../lib/angular/i18n/angular-locale_vai-vaii.js |   143 +
 .../js/lib/angular/i18n/angular-locale_vai.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_ve-za.js |   128 +
 .../js/lib/angular/i18n/angular-locale_ve.js    |   128 +
 .../js/lib/angular/i18n/angular-locale_vi-vn.js |   125 +
 .../js/lib/angular/i18n/angular-locale_vi.js    |   125 +
 .../lib/angular/i18n/angular-locale_vo-001.js   |   128 +
 .../js/lib/angular/i18n/angular-locale_vo.js    |   128 +
 .../lib/angular/i18n/angular-locale_vun-tz.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_vun.js   |   143 +
 .../lib/angular/i18n/angular-locale_wae-ch.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_wae.js   |   143 +
 .../lib/angular/i18n/angular-locale_wal-et.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_wal.js   |   115 +
 .../js/lib/angular/i18n/angular-locale_xh-za.js |   115 +
 .../js/lib/angular/i18n/angular-locale_xh.js    |   115 +
 .../lib/angular/i18n/angular-locale_xog-ug.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_xog.js   |   143 +
 .../lib/angular/i18n/angular-locale_yav-cm.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_yav.js   |   143 +
 .../lib/angular/i18n/angular-locale_yi-001.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_yi.js    |   143 +
 .../js/lib/angular/i18n/angular-locale_yo-bj.js |   143 +
 .../js/lib/angular/i18n/angular-locale_yo-ng.js |   143 +
 .../js/lib/angular/i18n/angular-locale_yo.js    |   143 +
 .../lib/angular/i18n/angular-locale_zgh-ma.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_zgh.js   |   143 +
 .../js/lib/angular/i18n/angular-locale_zh-cn.js |   125 +
 .../angular/i18n/angular-locale_zh-hans-cn.js   |   125 +
 .../angular/i18n/angular-locale_zh-hans-hk.js   |   125 +
 .../angular/i18n/angular-locale_zh-hans-mo.js   |   125 +
 .../angular/i18n/angular-locale_zh-hans-sg.js   |   125 +
 .../lib/angular/i18n/angular-locale_zh-hans.js  |   125 +
 .../angular/i18n/angular-locale_zh-hant-hk.js   |   125 +
 .../angular/i18n/angular-locale_zh-hant-mo.js   |   125 +
 .../angular/i18n/angular-locale_zh-hant-tw.js   |   125 +
 .../lib/angular/i18n/angular-locale_zh-hant.js  |   125 +
 .../js/lib/angular/i18n/angular-locale_zh-hk.js |   125 +
 .../js/lib/angular/i18n/angular-locale_zh-tw.js |   125 +
 .../js/lib/angular/i18n/angular-locale_zh.js    |   125 +
 .../js/lib/angular/i18n/angular-locale_zu-za.js |   125 +
 .../js/lib/angular/i18n/angular-locale_zu.js    |   125 +
 .../src/main/webapp/js/lib/angular/version.json |     1 +
 .../src/main/webapp/js/lib/angular/version.txt  |     1 +
 .../src/main/webapp/js/services/DataService.js  |    74 +
 .../src/main/webapp/partials/home.html          |     6 +
 .../src/main/webapp/partials/projects.html      |     3 +
 .../src/test/java/actions/IndexTest.java        |    37 +
 struts2-archetype-blank/README.txt              |    61 +
 struts2-archetype-blank/pom.xml                 |    87 +
 .../META-INF/maven/archetype-metadata.xml       |    62 +
 .../main/resources/META-INF/maven/archetype.xml |    39 +
 .../resources/archetype-resources/LICENSE.txt   |   174 +
 .../resources/archetype-resources/NOTICE.txt    |     6 +
 .../resources/archetype-resources/README.txt    |    10 +
 .../main/resources/archetype-resources/pom.xml  |   100 +
 .../src/main/java/example/ExampleSupport.java   |    30 +
 .../src/main/java/example/HelloWorld.java       |    61 +
 .../src/main/java/example/Login.java            |    59 +
 .../src/main/resources/example.xml              |    30 +
 .../main/resources/example/Login-validation.xml |    17 +
 .../main/resources/example/package.properties   |     5 +
 .../resources/example/package_es.properties     |     5 +
 .../src/main/resources/log4j2.xml               |    16 +
 .../src/main/resources/struts.xml               |    25 +
 .../main/webapp/WEB-INF/example/HelloWorld.jsp  |    28 +
 .../src/main/webapp/WEB-INF/example/Login.jsp   |    15 +
 .../src/main/webapp/WEB-INF/example/Menu.jsp    |     3 +
 .../src/main/webapp/WEB-INF/example/Missing.jsp |    11 +
 .../main/webapp/WEB-INF/example/Register.jsp    |     3 +
 .../src/main/webapp/WEB-INF/example/Welcome.jsp |    18 +
 .../src/main/webapp/WEB-INF/web.xml             |    23 +
 .../src/main/webapp/index.html                  |    10 +
 .../src/test/java/example/ConfigTest.java       |    97 +
 .../src/test/java/example/HelloWorldTest.java   |    37 +
 .../src/test/java/example/LoginTest.java        |    55 +
 struts2-archetype-convention/README.txt         |    59 +
 struts2-archetype-convention/pom.xml            |    86 +
 .../META-INF/maven/archetype-metadata.xml       |    55 +
 .../main/resources/META-INF/maven/archetype.xml |     7 +
 .../resources/archetype-resources/LICENSE.txt   |   174 +
 .../resources/archetype-resources/NOTICE.txt    |     6 +
 .../resources/archetype-resources/README.txt    |    10 +
 .../main/resources/archetype-resources/pom.xml  |   108 +
 .../src/main/java/InitListener.java             |    25 +
 .../src/main/java/actions/HelloAction.java      |    42 +
 .../src/main/java/actions/Index.java            |    24 +
 .../src/main/resources/log4j2.xml               |    16 +
 .../src/main/resources/package.properties       |     2 +
 .../src/main/resources/package_es.properties    |     2 +
 .../src/main/resources/struts.xml               |    10 +
 .../src/main/webapp/WEB-INF/appengine-web.xml   |     6 +
 .../src/main/webapp/WEB-INF/content/hello.jsp   |    28 +
 .../src/main/webapp/WEB-INF/web.xml             |    25 +
 .../src/main/webapp/index.jsp                   |     1 +
 .../src/test/java/actions/HelloActionTest.java  |    16 +
 .../src/test/java/actions/IndexTest.java        |    14 +
 struts2-archetype-dbportlet/README.txt          |    54 +
 struts2-archetype-dbportlet/pom.xml             |    86 +
 .../META-INF/maven/archetype-metadata.xml       |    41 +
 .../main/resources/archetype-resources/pom.xml  |   135 +
 .../src/main/java/edit/IndexAction.java         |    46 +
 .../src/main/java/view/IndexAction.java         |    51 +
 .../src/main/resources/log4j2.xml               |    16 +
 .../src/main/resources/struts.xml               |    22 +
 .../main/webapp/WEB-INF/applicationContext.xml  |    20 +
 .../main/webapp/WEB-INF/edit/index-input.jsp    |    10 +
 .../main/webapp/WEB-INF/edit/index-success.jsp  |    22 +
 .../src/main/webapp/WEB-INF/help/index.jsp      |     1 +
 .../src/main/webapp/WEB-INF/portlet.xml         |    63 +
 .../src/main/webapp/WEB-INF/view/index.jsp      |    21 +
 .../src/main/webapp/WEB-INF/web.xml             |    37 +
 .../src/main/webapp/index.jsp                   |     4 +
 struts2-archetype-plugin/pom.xml                |    85 +
 .../META-INF/maven/archetype-metadata.xml       |    42 +
 .../resources/archetype-resources/LICENSE.txt   |   174 +
 .../resources/archetype-resources/NOTICE.txt    |     6 +
 .../resources/archetype-resources/README.txt    |    10 +
 .../main/resources/archetype-resources/pom.xml  |    43 +
 .../src/main/java/MyResult.java                 |    48 +
 .../src/main/resources/struts-plugin.xml        |    47 +
 struts2-archetype-portlet/README.txt            |    52 +
 struts2-archetype-portlet/pom.xml               |    79 +
 .../META-INF/maven/archetype-metadata.xml       |    41 +
 .../main/resources/archetype-resources/pom.xml  |    91 +
 .../src/main/java/HelloAction.java              |    36 +
 .../src/main/java/UpdateNameAction.java         |    54 +
 .../src/main/resources/struts.xml               |    23 +
 .../src/main/webapp/WEB-INF/jsp/edit/index.jsp  |    13 +
 .../src/main/webapp/WEB-INF/jsp/view/index.jsp  |     9 +
 .../src/main/webapp/WEB-INF/portlet.xml         |    62 +
 .../src/main/webapp/WEB-INF/web.xml             |    21 +
 struts2-archetype-starter/README.txt            |    66 +
 struts2-archetype-starter/pom.xml               |    88 +
 .../META-INF/maven/archetype-metadata.xml       |    53 +
 .../main/resources/archetype-resources/pom.xml  |   133 +
 .../src/main/java/DateConverter.java            |    50 +
 .../src/main/java/HelloWorldAction.java         |    45 +
 .../src/main/java/IndexAction.java              |    38 +
 .../src/main/resources/applicationContext.xml   |    10 +
 .../main/resources/globalmessages.properties    |     5 +
 .../src/main/resources/log4j2.xml               |    17 +
 .../src/main/resources/struts.properties        |   130 +
 .../src/main/resources/struts.xml               |    25 +
 .../main/resources/xwork-conversion.properties  |     4 +
 .../src/main/webapp/WEB-INF/decorators.xml      |    18 +
 .../src/main/webapp/WEB-INF/decorators/main.jsp |    86 +
 .../src/main/webapp/WEB-INF/dwr.xml             |    22 +
 .../src/main/webapp/WEB-INF/jsp/helloWorld.jsp  |    16 +
 .../src/main/webapp/WEB-INF/jsp/index.jsp       |    20 +
 .../src/main/webapp/WEB-INF/sitemesh.xml        |    50 +
 .../src/main/webapp/WEB-INF/web.xml             |    76 +
 .../src/main/webapp/index.jsp                   |     2 +
 .../src/main/webapp/styles/forms.css            |   100 +
 .../src/main/webapp/styles/layout-1col.css      |    27 +
 .../main/webapp/styles/layout-navleft-1col.css  |    31 +
 .../main/webapp/styles/layout-navleft-2col.css  |    39 +
 .../main/webapp/styles/layout-navtop-1col.css   |    32 +
 .../main/webapp/styles/layout-navtop-3col.css   |    43 +
 .../webapp/styles/layout-navtop-localleft.css   |    36 +
 .../webapp/styles/layout-navtop-subright.css    |    36 +
 .../src/main/webapp/styles/layout.css           |   125 +
 .../src/main/webapp/styles/main.css             |    21 +
 .../src/main/webapp/styles/nav-horizontal.css   |    80 +
 .../src/main/webapp/styles/nav-vertical.css     |    79 +
 .../src/main/webapp/styles/tools.css            |    68 +
 .../src/main/webapp/styles/typo.css             |   177 +
 .../src/test/java/HelloWorldActionTest.java     |    33 +
 .../src/test/java/IndexActionTest.java          |    32 +
 .../src/test/resources/test.properties          |     4 +
 933 files changed, 193406 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..7d098d8
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * $Id: pom.xml 820737 2009-10-01 18:03:21Z musachy $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.struts</groupId>
+        <artifactId>struts-master</artifactId>
+        <version>10</version>
+    </parent>
+
+    <artifactId>struts-archetypes</artifactId>
+    <version>2.5.3-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>Struts 2 Maven Archetypes</name>
+
+    <modules>
+        <module>struts2-archetype-angularjs</module>
+        <module>struts2-archetype-blank</module>
+        <module>struts2-archetype-convention</module>
+        <module>struts2-archetype-dbportlet</module>
+        <module>struts2-archetype-plugin</module>
+        <module>struts2-archetype-portlet</module>
+        <module>struts2-archetype-starter</module>
+    </modules>
+
+    <properties>
+    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                    <skipDeploy>true</skipDeploy>
+                    <generateReports>false</generateReports>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/README.txt
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/README.txt b/struts2-archetype-angularjs/README.txt
new file mode 100644
index 0000000..3151a95
--- /dev/null
+++ b/struts2-archetype-angularjs/README.txt
@@ -0,0 +1,61 @@
+INFORMATION
+===========
+- This is Struts 2's "HTML5 AngularJS" Maven Archetype
+
+USAGE
+=====
+
+- change directory to where the web app template is to be created,
+  for example, a 'projects' directory (which you may need to create):
+  
+     cd /home/tmjee/projects
+  
+- run the following command to generate the sample web app template, assuming :-
+    - root java package -> com.mycompany.mysystem
+
+    - the webapp war name   ->  myWebApp
+
+
+mvn archetype:generate -B -DgroupId=com.mycompany.mysystem \
+							-DartifactId=myWebApp \
+							-DarchetypeGroupId=org.apache.struts \
+							-DarchetypeArtifactId=struts2-archetype-angularjs \
+							-DarchetypeVersion=<CURRENT_STRUTS_VERSION> \
+							-DremoteRepositories=http://struts.apache.org
+
+
+For more details about the Struts2 archetypes, please take a look at our Wiki page.
+
+-> https://cwiki.apache.org/confluence/display/WW/Struts+2+Maven+Archetypes
+
+
+IMPORTANT:
+==========
+- The generated template uses the 'example' package, regardless of what you
+specify during mvn archetype:create.
+
+Unfortunately, the Maven Archetype plugin does not currently provide a way to
+move resource files into a package structure.
+
+- to compile, execute
+  mvn compile
+
+- to run test cases execute
+  mvn test
+
+- to clean execute
+  mvn clean
+
+- to package execute 
+  mvn package
+
+- to start it with jetty6 execute
+  mvn jetty:run
+
+I18N:
+=====
+Please note that this project was created with the assumption that it will be run
+in an environment where the default locale is set to English. This means that
+the default messages defined in package.properties are in English. If the default
+locale for your server is different, then rename package.properties to package_en.properties
+and create a new package.properties with proper values for your default locale.

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/pom.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/pom.xml b/struts2-archetype-angularjs/pom.xml
new file mode 100644
index 0000000..6003f28
--- /dev/null
+++ b/struts2-archetype-angularjs/pom.xml
@@ -0,0 +1,86 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <groupId>org.apache.struts</groupId>
+        <artifactId>struts-archetypes</artifactId>
+        <version>2.5.3-SNAPSHOT</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>struts2-archetype-angularjs</artifactId>
+    <packaging>jar</packaging>
+    <name>Struts 2 Archetypes - Angular JS</name>
+
+    <properties>
+        <maven.test.skip>true</maven.test.skip>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/*.*</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources/archetype-resources/src</directory>
+                <filtering>false</filtering>
+                <includes>
+                    <include>**/*.*</include>
+                </includes>
+            </resource>
+        </resources>
+
+        <extensions>
+            <extension>
+                <groupId>org.apache.maven.archetype</groupId>
+                <artifactId>archetype-packaging</artifactId>
+                <version>2.0</version>
+            </extension>
+        </extensions>
+
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-resources-plugin</artifactId>
+                    <version>2.5</version>
+                    <configuration>
+                        <escapeString>\</escapeString>
+                        <encoding>UTF-8</encoding>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-archetype-plugin</artifactId>
+                    <version>2.0</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>release</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>sign-artifacts</id>
+                                <phase>verify</phase>
+                                <goals>
+                                    <goal>sign</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype-metadata.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype-metadata.xml b/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype-metadata.xml
new file mode 100644
index 0000000..6d58737
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archetype-descriptor name="struts2-archetype-angularjs">
+
+    <fileSets>
+        <fileSet filtered="true" packaged="true">
+            <directory>src/main/java</directory>
+            <includes>
+                <include>**/*.java</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="true" packaged="true">
+            <directory>src/test/java</directory>
+            <includes>
+                <include>**/*.java</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="true">
+            <directory>src/main/resources</directory>
+            <includes>
+                <include>**/*package*.properties</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="false">
+            <directory>src/main/resources</directory>
+            <includes>
+                <include>jshint.conf.js</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="true" packaged="false">
+            <directory>src/main/resources</directory>
+            <includes>
+                <include>**/*.xml</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="false">
+            <directory>src/main/webapp</directory>
+            <includes>
+                <include>**/*.jsp</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="true" packaged="false">
+            <directory>src/main/webapp/WEB-INF</directory>
+            <includes>
+                <include>**/*.xml</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="false">
+            <directory>src/main/webapp/js</directory>
+            <includes>
+                <include>**/*</include>
+            </includes>
+        </fileSet>
+        <fileSet filtered="false" packaged="false">
+            <directory>src/main/webapp/partials</directory>
+            <includes>
+                <include>**/*</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+
+</archetype-descriptor>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype.xml b/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype.xml
new file mode 100644
index 0000000..f4a1e03
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/META-INF/maven/archetype.xml
@@ -0,0 +1,7 @@
+<archetype
+    xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0 http://maven.apache.org/xsd/archetype-1.0.0.xsd"
+>
+  <id>struts2-archetype-angularjs</id>
+</archetype>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/LICENSE.txt
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/LICENSE.txt b/struts2-archetype-angularjs/src/main/resources/archetype-resources/LICENSE.txt
new file mode 100644
index 0000000..dd5b3a5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/LICENSE.txt
@@ -0,0 +1,174 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/NOTICE.txt
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/NOTICE.txt b/struts2-archetype-angularjs/src/main/resources/archetype-resources/NOTICE.txt
new file mode 100644
index 0000000..0f2aa9e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/NOTICE.txt
@@ -0,0 +1,6 @@
+Apache Struts
+
+Copyright 2006-2011 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/pom.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/pom.xml b/struts2-archetype-angularjs/src/main/resources/archetype-resources/pom.xml
new file mode 100644
index 0000000..70c58c4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/pom.xml
@@ -0,0 +1,177 @@
+\ufeff<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>\${groupId}</groupId>
+    <artifactId>\${artifactId}</artifactId>
+    <version>\${version}</version>
+    <packaging>war</packaging>
+    <name>\${artifactId}</name>
+
+    <properties>
+        <struts2.version>${project.version}</struts2.version>
+        <log4j2.version>${log4j2.version}</log4j2.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-core</artifactId>
+            <version>\${struts2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-convention-plugin</artifactId>
+            <version>\${struts2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-junit-plugin</artifactId>
+            <version>\${struts2.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-json-plugin</artifactId>
+            <version>\${struts2.version}</version>
+        </dependency>
+
+        <dependency>
+          <groupId>org.apache.struts</groupId>
+          <artifactId>struts2-config-browser-plugin</artifactId>
+          <version>\${struts2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>\${log4j2.version}</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.5</version>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.1.0</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>jsp-api</artifactId>
+            <version>2.0</version>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.3</version>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.cj.jshintmojo</groupId>
+                <artifactId>jshint-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>lint</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <configFile>src/main/resources/jshint.conf.js</configFile>
+                    <directories>
+                        <directory>src/main/webapp/js/</directory>
+                    </directories>
+                    <excludes>
+                        <exclude>src/main/webapp/js/lib</exclude>
+                    </excludes>
+                    <reporter>jslint</reporter>
+                    <reportFile>target/jshint.xml</reportFile>
+                    <failOnError>true</failOnError>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.samaxes.maven</groupId>
+                <artifactId>minify-maven-plugin</artifactId>
+                <version>1.7.4</version>
+                <executions>
+                    <execution>
+                        <id>external-minify</id>
+                        <phase>package</phase>
+                        <configuration>
+                            <jsEngine>CLOSURE</jsEngine>
+                            <closureLanguage>ECMASCRIPT5_STRICT</closureLanguage>
+                            <skipMinify>true</skipMinify>
+                            <jsFinalFile>external.js</jsFinalFile>
+                            <jsSourceFiles>
+                                <jsSourceFile>lib/angular/angular.min.js</jsSourceFile>
+                                <jsSourceFile>lib/angular/angular-route.min.js</jsSourceFile>
+                            </jsSourceFiles>
+                        </configuration>
+                        <goals>
+                            <goal>minify</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>application-minify</id>
+                        <phase>package</phase>
+                        <configuration>
+                            <jsEngine>CLOSURE</jsEngine>
+                            <closureLanguage>ECMASCRIPT5_STRICT</closureLanguage>
+                            <jsFinalFile>application.js</jsFinalFile>
+                            <jsSourceFiles>
+                                <jsSourceFile>app.js</jsSourceFile>
+                                <jsSourceFile>config.js</jsSourceFile>
+                            </jsSourceFiles>
+                            <jsSourceIncludes>
+                                <jsSourceInclude>services/*.js</jsSourceInclude>
+                                <jsSourceInclude>controllers/*.js</jsSourceInclude>
+                            </jsSourceIncludes>
+
+                        </configuration>
+                        <goals>
+                            <goal>minify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>9.3.3.v20150827</version>
+                <configuration>
+                    <stopKey>CTRL+C</stopKey>
+                    <stopPort>8999</stopPort>
+                    <scanIntervalSeconds>10</scanIntervalSeconds>
+                    <webAppSourceDirectory>\${basedir}/src/main/webapp/</webAppSourceDirectory>
+                    <webAppConfig>
+                        <descriptor>\${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor>
+                    </webAppConfig>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/Index.java
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/Index.java b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/Index.java
new file mode 100644
index 0000000..4d8600a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/Index.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package ${package}.actions;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/* Default action when enter the application */
+public class Index extends ActionSupport {
+
+    private static final long serialVersionUID = -3243216917801206214L;
+
+    private boolean useMinifiedResources = false;
+
+    public String execute() throws Exception {
+        return SUCCESS;
+    }
+
+    public boolean isUseMinifiedResources() {
+        return useMinifiedResources;
+    }
+
+    public void setUseMinifiedResources(boolean useMinifiedResources) {
+        this.useMinifiedResources = useMinifiedResources;
+    }
+}
+


[22/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bi.js
new file mode 100644
index 0000000..52bb8fc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bi.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FBu",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-bi",
+  "localeID": "fr_BI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bj.js
new file mode 100644
index 0000000..19ee686
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bj.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-bj",
+  "localeID": "fr_BJ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bl.js
new file mode 100644
index 0000000..415d9ca
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-bl",
+  "localeID": "fr_BL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ca.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ca.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ca.js
new file mode 100644
index 0000000..4f1327d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ca.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy-MM-dd HH:mm",
+    "shortDate": "yy-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-ca",
+  "localeID": "fr_CA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cd.js
new file mode 100644
index 0000000..5a920e6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cd.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-cd",
+  "localeID": "fr_CD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cf.js
new file mode 100644
index 0000000..e76a32b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cf.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-cf",
+  "localeID": "fr_CF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cg.js
new file mode 100644
index 0000000..3b4ee67
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-cg",
+  "localeID": "fr_CG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ch.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ch.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ch.js
new file mode 100644
index 0000000..df05fe9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ch.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fr-ch",
+  "localeID": "fr_CH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ci.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ci.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ci.js
new file mode 100644
index 0000000..032a6ff
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ci.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-ci",
+  "localeID": "fr_CI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cm.js
new file mode 100644
index 0000000..74d3d1b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-cm.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-cm",
+  "localeID": "fr_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dj.js
new file mode 100644
index 0000000..471c1e7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dj.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Fdj",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-dj",
+  "localeID": "fr_DJ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dz.js
new file mode 100644
index 0000000..c7f4956
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-dz.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-dz",
+  "localeID": "fr_DZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-fr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-fr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-fr.js
new file mode 100644
index 0000000..b910e03
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-fr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-fr",
+  "localeID": "fr_FR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ga.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ga.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ga.js
new file mode 100644
index 0000000..1d4a5a7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ga.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-ga",
+  "localeID": "fr_GA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gf.js
new file mode 100644
index 0000000..d1dc69b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gf.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-gf",
+  "localeID": "fr_GF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gn.js
new file mode 100644
index 0000000..062e0f4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FG",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-gn",
+  "localeID": "fr_GN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gp.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gp.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gp.js
new file mode 100644
index 0000000..d0a9b06
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gp.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-gp",
+  "localeID": "fr_GP",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gq.js
new file mode 100644
index 0000000..47a105a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-gq.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-gq",
+  "localeID": "fr_GQ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ht.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ht.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ht.js
new file mode 100644
index 0000000..7b3de3d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ht.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "HTG",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-ht",
+  "localeID": "fr_HT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-km.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-km.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-km.js
new file mode 100644
index 0000000..3e2880e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-km.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CF",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-km",
+  "localeID": "fr_KM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-lu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-lu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-lu.js
new file mode 100644
index 0000000..7dd9fa4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-lu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-lu",
+  "localeID": "fr_LU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ma.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ma.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ma.js
new file mode 100644
index 0000000..bc69704
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ma.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-ma",
+  "localeID": "fr_MA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mc.js
new file mode 100644
index 0000000..db81a80
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mc.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-mc",
+  "localeID": "fr_MC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mf.js
new file mode 100644
index 0000000..ff06ac7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mf.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-mf",
+  "localeID": "fr_MF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mg.js
new file mode 100644
index 0000000..1c40fe5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ar",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-mg",
+  "localeID": "fr_MG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ml.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ml.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ml.js
new file mode 100644
index 0000000..1cead4c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-ml.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-ml",
+  "localeID": "fr_ML",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mq.js
new file mode 100644
index 0000000..120873b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-mq.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-mq",
+  "localeID": "fr_MQ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[39/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.js
new file mode 100644
index 0000000..fc1cf7d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.js
@@ -0,0 +1,729 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* global ngTouchClickDirectiveFactory: false,
+ */
+
+/**
+ * @ngdoc module
+ * @name ngTouch
+ * @description
+ *
+ * # ngTouch
+ *
+ * The `ngTouch` module provides touch events and other helpers for touch-enabled devices.
+ * The implementation is based on jQuery Mobile touch event handling
+ * ([jquerymobile.com](http://jquerymobile.com/)).
+ *
+ *
+ * See {@link ngTouch.$swipe `$swipe`} for usage.
+ *
+ * <div doc-module-components="ngTouch"></div>
+ *
+ */
+
+// define ngTouch module
+/* global -ngTouch */
+var ngTouch = angular.module('ngTouch', []);
+
+ngTouch.provider('$touch', $TouchProvider);
+
+function nodeName_(element) {
+  return angular.lowercase(element.nodeName || (element[0] && element[0].nodeName));
+}
+
+/**
+ * @ngdoc provider
+ * @name $touchProvider
+ *
+ * @description
+ * The `$touchProvider` allows enabling / disabling {@link ngTouch.ngClick ngTouch's ngClick directive}.
+ */
+$TouchProvider.$inject = ['$provide', '$compileProvider'];
+function $TouchProvider($provide, $compileProvider) {
+
+  /**
+   * @ngdoc method
+   * @name  $touchProvider#ngClickOverrideEnabled
+   *
+   * @param {boolean=} enabled update the ngClickOverrideEnabled state if provided, otherwise just return the
+   * current ngClickOverrideEnabled state
+   * @returns {*} current value if used as getter or itself (chaining) if used as setter
+   *
+   * @kind function
+   *
+   * @description
+   * Call this method to enable/disable {@link ngTouch.ngClick ngTouch's ngClick directive}. If enabled,
+   * the default ngClick directive will be replaced by a version that eliminates the 300ms delay for
+   * click events on browser for touch-devices.
+   *
+   * The default is `false`.
+   *
+   */
+  var ngClickOverrideEnabled = false;
+  var ngClickDirectiveAdded = false;
+  this.ngClickOverrideEnabled = function(enabled) {
+    if (angular.isDefined(enabled)) {
+
+      if (enabled && !ngClickDirectiveAdded) {
+        ngClickDirectiveAdded = true;
+
+        // Use this to identify the correct directive in the delegate
+        ngTouchClickDirectiveFactory.$$moduleName = 'ngTouch';
+        $compileProvider.directive('ngClick', ngTouchClickDirectiveFactory);
+
+        $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {
+          if (ngClickOverrideEnabled) {
+            // drop the default ngClick directive
+            $delegate.shift();
+          } else {
+            // drop the ngTouch ngClick directive if the override has been re-disabled (because
+            // we cannot de-register added directives)
+            var i = $delegate.length - 1;
+            while (i >= 0) {
+              if ($delegate[i].$$moduleName === 'ngTouch') {
+                $delegate.splice(i, 1);
+                break;
+              }
+              i--;
+            }
+          }
+
+          return $delegate;
+        }]);
+      }
+
+      ngClickOverrideEnabled = enabled;
+      return this;
+    }
+
+    return ngClickOverrideEnabled;
+  };
+
+  /**
+  * @ngdoc service
+  * @name $touch
+  * @kind object
+  *
+  * @description
+  * Provides the {@link ngTouch.$touch#ngClickOverrideEnabled `ngClickOverrideEnabled`} method.
+  *
+  */
+  this.$get = function() {
+    return {
+      /**
+       * @ngdoc method
+       * @name  $touch#ngClickOverrideEnabled
+       *
+       * @returns {*} current value of `ngClickOverrideEnabled` set in the {@link ngTouch.$touchProvider $touchProvider},
+       * i.e. if {@link ngTouch.ngClick ngTouch's ngClick} directive is enabled.
+       *
+       * @kind function
+       */
+      ngClickOverrideEnabled: function() {
+        return ngClickOverrideEnabled;
+      }
+    };
+  };
+
+}
+
+/* global ngTouch: false */
+
+    /**
+     * @ngdoc service
+     * @name $swipe
+     *
+     * @description
+     * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe
+     * behavior, to make implementing swipe-related directives more convenient.
+     *
+     * Requires the {@link ngTouch `ngTouch`} module to be installed.
+     *
+     * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`.
+     *
+     * # Usage
+     * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element
+     * which is to be watched for swipes, and an object with four handler functions. See the
+     * documentation for `bind` below.
+     */
+
+ngTouch.factory('$swipe', [function() {
+  // The total distance in any direction before we make the call on swipe vs. scroll.
+  var MOVE_BUFFER_RADIUS = 10;
+
+  var POINTER_EVENTS = {
+    'mouse': {
+      start: 'mousedown',
+      move: 'mousemove',
+      end: 'mouseup'
+    },
+    'touch': {
+      start: 'touchstart',
+      move: 'touchmove',
+      end: 'touchend',
+      cancel: 'touchcancel'
+    }
+  };
+
+  function getCoordinates(event) {
+    var originalEvent = event.originalEvent || event;
+    var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];
+    var e = (originalEvent.changedTouches && originalEvent.changedTouches[0]) || touches[0];
+
+    return {
+      x: e.clientX,
+      y: e.clientY
+    };
+  }
+
+  function getEvents(pointerTypes, eventType) {
+    var res = [];
+    angular.forEach(pointerTypes, function(pointerType) {
+      var eventName = POINTER_EVENTS[pointerType][eventType];
+      if (eventName) {
+        res.push(eventName);
+      }
+    });
+    return res.join(' ');
+  }
+
+  return {
+    /**
+     * @ngdoc method
+     * @name $swipe#bind
+     *
+     * @description
+     * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an
+     * object containing event handlers.
+     * The pointer types that should be used can be specified via the optional
+     * third argument, which is an array of strings `'mouse'` and `'touch'`. By default,
+     * `$swipe` will listen for `mouse` and `touch` events.
+     *
+     * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`
+     * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }` and the raw
+     * `event`. `cancel` receives the raw `event` as its single parameter.
+     *
+     * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is
+     * watching for `touchmove` or `mousemove` events. These events are ignored until the total
+     * distance moved in either dimension exceeds a small threshold.
+     *
+     * Once this threshold is exceeded, either the horizontal or vertical delta is greater.
+     * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.
+     * - If the vertical distance is greater, this is a scroll, and we let the browser take over.
+     *   A `cancel` event is sent.
+     *
+     * `move` is called on `mousemove` and `touchmove` after the above logic has determined that
+     * a swipe is in progress.
+     *
+     * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`.
+     *
+     * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling
+     * as described above.
+     *
+     */
+    bind: function(element, eventHandlers, pointerTypes) {
+      // Absolute total movement, used to control swipe vs. scroll.
+      var totalX, totalY;
+      // Coordinates of the start position.
+      var startCoords;
+      // Last event's position.
+      var lastPos;
+      // Whether a swipe is active.
+      var active = false;
+
+      pointerTypes = pointerTypes || ['mouse', 'touch'];
+      element.on(getEvents(pointerTypes, 'start'), function(event) {
+        startCoords = getCoordinates(event);
+        active = true;
+        totalX = 0;
+        totalY = 0;
+        lastPos = startCoords;
+        eventHandlers['start'] && eventHandlers['start'](startCoords, event);
+      });
+      var events = getEvents(pointerTypes, 'cancel');
+      if (events) {
+        element.on(events, function(event) {
+          active = false;
+          eventHandlers['cancel'] && eventHandlers['cancel'](event);
+        });
+      }
+
+      element.on(getEvents(pointerTypes, 'move'), function(event) {
+        if (!active) return;
+
+        // Android will send a touchcancel if it thinks we're starting to scroll.
+        // So when the total distance (+ or - or both) exceeds 10px in either direction,
+        // we either:
+        // - On totalX > totalY, we send preventDefault() and treat this as a swipe.
+        // - On totalY > totalX, we let the browser handle it as a scroll.
+
+        if (!startCoords) return;
+        var coords = getCoordinates(event);
+
+        totalX += Math.abs(coords.x - lastPos.x);
+        totalY += Math.abs(coords.y - lastPos.y);
+
+        lastPos = coords;
+
+        if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {
+          return;
+        }
+
+        // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.
+        if (totalY > totalX) {
+          // Allow native scrolling to take over.
+          active = false;
+          eventHandlers['cancel'] && eventHandlers['cancel'](event);
+          return;
+        } else {
+          // Prevent the browser from scrolling.
+          event.preventDefault();
+          eventHandlers['move'] && eventHandlers['move'](coords, event);
+        }
+      });
+
+      element.on(getEvents(pointerTypes, 'end'), function(event) {
+        if (!active) return;
+        active = false;
+        eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event);
+      });
+    }
+  };
+}]);
+
+/* global ngTouch: false,
+  nodeName_: false
+*/
+
+/**
+ * @ngdoc directive
+ * @name ngClick
+ * @deprecated
+ *
+ * @description
+ * <div class="alert alert-danger">
+ * **DEPRECATION NOTICE**: Beginning with Angular 1.5, this directive is deprecated and by default **disabled**.
+ * The directive will receive no further support and might be removed from future releases.
+ * If you need the directive, you can enable it with the {@link ngTouch.$touchProvider $touchProvider#ngClickOverrideEnabled}
+ * function. We also recommend that you migrate to [FastClick](https://github.com/ftlabs/fastclick).
+ * To learn more about the 300ms delay, this [Telerik article](http://developer.telerik.com/featured/300-ms-click-delay-ios-8/)
+ * gives a good overview.
+ * </div>
+ * A more powerful replacement for the default ngClick designed to be used on touchscreen
+ * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending
+ * the click event. This version handles them immediately, and then prevents the
+ * following click event from propagating.
+ *
+ * Requires the {@link ngTouch `ngTouch`} module to be installed.
+ *
+ * This directive can fall back to using an ordinary click event, and so works on desktop
+ * browsers as well as mobile.
+ *
+ * This directive also sets the CSS class `ng-click-active` while the element is being held
+ * down (by a mouse click or touch) so you can restyle the depressed element if you wish.
+ *
+ * @element ANY
+ * @param {expression} ngClick {@link guide/expression Expression} to evaluate
+ * upon tap. (Event object is available as `$event`)
+ *
+ * @example
+    <example module="ngClickExample" deps="angular-touch.js">
+      <file name="index.html">
+        <button ng-click="count = count + 1" ng-init="count=0">
+          Increment
+        </button>
+        count: {{ count }}
+      </file>
+      <file name="script.js">
+        angular.module('ngClickExample', ['ngTouch']);
+      </file>
+    </example>
+ */
+
+var ngTouchClickDirectiveFactory = ['$parse', '$timeout', '$rootElement',
+    function($parse, $timeout, $rootElement) {
+  var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.
+  var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.
+  var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click
+  var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.
+
+  var ACTIVE_CLASS_NAME = 'ng-click-active';
+  var lastPreventedTime;
+  var touchCoordinates;
+  var lastLabelClickCoordinates;
+
+
+  // TAP EVENTS AND GHOST CLICKS
+  //
+  // Why tap events?
+  // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're
+  // double-tapping, and then fire a click event.
+  //
+  // This delay sucks and makes mobile apps feel unresponsive.
+  // So we detect touchstart, touchcancel and touchend ourselves and determine when
+  // the user has tapped on something.
+  //
+  // What happens when the browser then generates a click event?
+  // The browser, of course, also detects the tap and fires a click after a delay. This results in
+  // tapping/clicking twice. We do "clickbusting" to prevent it.
+  //
+  // How does it work?
+  // We attach global touchstart and click handlers, that run during the capture (early) phase.
+  // So the sequence for a tap is:
+  // - global touchstart: Sets an "allowable region" at the point touched.
+  // - element's touchstart: Starts a touch
+  // (- touchcancel ends the touch, no click follows)
+  // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold
+  //   too long) and fires the user's tap handler. The touchend also calls preventGhostClick().
+  // - preventGhostClick() removes the allowable region the global touchstart created.
+  // - The browser generates a click event.
+  // - The global click handler catches the click, and checks whether it was in an allowable region.
+  //     - If preventGhostClick was called, the region will have been removed, the click is busted.
+  //     - If the region is still there, the click proceeds normally. Therefore clicks on links and
+  //       other elements without ngTap on them work normally.
+  //
+  // This is an ugly, terrible hack!
+  // Yeah, tell me about it. The alternatives are using the slow click events, or making our users
+  // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular
+  // encapsulates this ugly logic away from the user.
+  //
+  // Why not just put click handlers on the element?
+  // We do that too, just to be sure. If the tap event caused the DOM to change,
+  // it is possible another element is now in that position. To take account for these possibly
+  // distinct elements, the handlers are global and care only about coordinates.
+
+  // Checks if the coordinates are close enough to be within the region.
+  function hit(x1, y1, x2, y2) {
+    return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;
+  }
+
+  // Checks a list of allowable regions against a click location.
+  // Returns true if the click should be allowed.
+  // Splices out the allowable region from the list after it has been used.
+  function checkAllowableRegions(touchCoordinates, x, y) {
+    for (var i = 0; i < touchCoordinates.length; i += 2) {
+      if (hit(touchCoordinates[i], touchCoordinates[i + 1], x, y)) {
+        touchCoordinates.splice(i, i + 2);
+        return true; // allowable region
+      }
+    }
+    return false; // No allowable region; bust it.
+  }
+
+  // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick
+  // was called recently.
+  function onClick(event) {
+    if (Date.now() - lastPreventedTime > PREVENT_DURATION) {
+      return; // Too old.
+    }
+
+    var touches = event.touches && event.touches.length ? event.touches : [event];
+    var x = touches[0].clientX;
+    var y = touches[0].clientY;
+    // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label
+    // and on the input element). Depending on the exact browser, this second click we don't want
+    // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label
+    // click event
+    if (x < 1 && y < 1) {
+      return; // offscreen
+    }
+    if (lastLabelClickCoordinates &&
+        lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) {
+      return; // input click triggered by label click
+    }
+    // reset label click coordinates on first subsequent click
+    if (lastLabelClickCoordinates) {
+      lastLabelClickCoordinates = null;
+    }
+    // remember label click coordinates to prevent click busting of trigger click event on input
+    if (nodeName_(event.target) === 'label') {
+      lastLabelClickCoordinates = [x, y];
+    }
+
+    // Look for an allowable region containing this click.
+    // If we find one, that means it was created by touchstart and not removed by
+    // preventGhostClick, so we don't bust it.
+    if (checkAllowableRegions(touchCoordinates, x, y)) {
+      return;
+    }
+
+    // If we didn't find an allowable region, bust the click.
+    event.stopPropagation();
+    event.preventDefault();
+
+    // Blur focused form elements
+    event.target && event.target.blur && event.target.blur();
+  }
+
+
+  // Global touchstart handler that creates an allowable region for a click event.
+  // This allowable region can be removed by preventGhostClick if we want to bust it.
+  function onTouchStart(event) {
+    var touches = event.touches && event.touches.length ? event.touches : [event];
+    var x = touches[0].clientX;
+    var y = touches[0].clientY;
+    touchCoordinates.push(x, y);
+
+    $timeout(function() {
+      // Remove the allowable region.
+      for (var i = 0; i < touchCoordinates.length; i += 2) {
+        if (touchCoordinates[i] == x && touchCoordinates[i + 1] == y) {
+          touchCoordinates.splice(i, i + 2);
+          return;
+        }
+      }
+    }, PREVENT_DURATION, false);
+  }
+
+  // On the first call, attaches some event handlers. Then whenever it gets called, it creates a
+  // zone around the touchstart where clicks will get busted.
+  function preventGhostClick(x, y) {
+    if (!touchCoordinates) {
+      $rootElement[0].addEventListener('click', onClick, true);
+      $rootElement[0].addEventListener('touchstart', onTouchStart, true);
+      touchCoordinates = [];
+    }
+
+    lastPreventedTime = Date.now();
+
+    checkAllowableRegions(touchCoordinates, x, y);
+  }
+
+  // Actual linking function.
+  return function(scope, element, attr) {
+    var clickHandler = $parse(attr.ngClick),
+        tapping = false,
+        tapElement,  // Used to blur the element after a tap.
+        startTime,   // Used to check if the tap was held too long.
+        touchStartX,
+        touchStartY;
+
+    function resetState() {
+      tapping = false;
+      element.removeClass(ACTIVE_CLASS_NAME);
+    }
+
+    element.on('touchstart', function(event) {
+      tapping = true;
+      tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.
+      // Hack for Safari, which can target text nodes instead of containers.
+      if (tapElement.nodeType == 3) {
+        tapElement = tapElement.parentNode;
+      }
+
+      element.addClass(ACTIVE_CLASS_NAME);
+
+      startTime = Date.now();
+
+      // Use jQuery originalEvent
+      var originalEvent = event.originalEvent || event;
+      var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];
+      var e = touches[0];
+      touchStartX = e.clientX;
+      touchStartY = e.clientY;
+    });
+
+    element.on('touchcancel', function(event) {
+      resetState();
+    });
+
+    element.on('touchend', function(event) {
+      var diff = Date.now() - startTime;
+
+      // Use jQuery originalEvent
+      var originalEvent = event.originalEvent || event;
+      var touches = (originalEvent.changedTouches && originalEvent.changedTouches.length) ?
+          originalEvent.changedTouches :
+          ((originalEvent.touches && originalEvent.touches.length) ? originalEvent.touches : [originalEvent]);
+      var e = touches[0];
+      var x = e.clientX;
+      var y = e.clientY;
+      var dist = Math.sqrt(Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2));
+
+      if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {
+        // Call preventGhostClick so the clickbuster will catch the corresponding click.
+        preventGhostClick(x, y);
+
+        // Blur the focused element (the button, probably) before firing the callback.
+        // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.
+        // I couldn't get anything to work reliably on Android Chrome.
+        if (tapElement) {
+          tapElement.blur();
+        }
+
+        if (!angular.isDefined(attr.disabled) || attr.disabled === false) {
+          element.triggerHandler('click', [event]);
+        }
+      }
+
+      resetState();
+    });
+
+    // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click
+    // something else nearby.
+    element.onclick = function(event) { };
+
+    // Actual click handler.
+    // There are three different kinds of clicks, only two of which reach this point.
+    // - On desktop browsers without touch events, their clicks will always come here.
+    // - On mobile browsers, the simulated "fast" click will call this.
+    // - But the browser's follow-up slow click will be "busted" before it reaches this handler.
+    // Therefore it's safe to use this directive on both mobile and desktop.
+    element.on('click', function(event, touchend) {
+      scope.$apply(function() {
+        clickHandler(scope, {$event: (touchend || event)});
+      });
+    });
+
+    element.on('mousedown', function(event) {
+      element.addClass(ACTIVE_CLASS_NAME);
+    });
+
+    element.on('mousemove mouseup', function(event) {
+      element.removeClass(ACTIVE_CLASS_NAME);
+    });
+
+  };
+}];
+
+/* global ngTouch: false */
+
+/**
+ * @ngdoc directive
+ * @name ngSwipeLeft
+ *
+ * @description
+ * Specify custom behavior when an element is swiped to the left on a touchscreen device.
+ * A leftward swipe is a quick, right-to-left slide of the finger.
+ * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag
+ * too.
+ *
+ * To disable the mouse click and drag functionality, add `ng-swipe-disable-mouse` to
+ * the `ng-swipe-left` or `ng-swipe-right` DOM Element.
+ *
+ * Requires the {@link ngTouch `ngTouch`} module to be installed.
+ *
+ * @element ANY
+ * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate
+ * upon left swipe. (Event object is available as `$event`)
+ *
+ * @example
+    <example module="ngSwipeLeftExample" deps="angular-touch.js">
+      <file name="index.html">
+        <div ng-show="!showActions" ng-swipe-left="showActions = true">
+          Some list content, like an email in the inbox
+        </div>
+        <div ng-show="showActions" ng-swipe-right="showActions = false">
+          <button ng-click="reply()">Reply</button>
+          <button ng-click="delete()">Delete</button>
+        </div>
+      </file>
+      <file name="script.js">
+        angular.module('ngSwipeLeftExample', ['ngTouch']);
+      </file>
+    </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSwipeRight
+ *
+ * @description
+ * Specify custom behavior when an element is swiped to the right on a touchscreen device.
+ * A rightward swipe is a quick, left-to-right slide of the finger.
+ * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag
+ * too.
+ *
+ * Requires the {@link ngTouch `ngTouch`} module to be installed.
+ *
+ * @element ANY
+ * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate
+ * upon right swipe. (Event object is available as `$event`)
+ *
+ * @example
+    <example module="ngSwipeRightExample" deps="angular-touch.js">
+      <file name="index.html">
+        <div ng-show="!showActions" ng-swipe-left="showActions = true">
+          Some list content, like an email in the inbox
+        </div>
+        <div ng-show="showActions" ng-swipe-right="showActions = false">
+          <button ng-click="reply()">Reply</button>
+          <button ng-click="delete()">Delete</button>
+        </div>
+      </file>
+      <file name="script.js">
+        angular.module('ngSwipeRightExample', ['ngTouch']);
+      </file>
+    </example>
+ */
+
+function makeSwipeDirective(directiveName, direction, eventName) {
+  ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {
+    // The maximum vertical delta for a swipe should be less than 75px.
+    var MAX_VERTICAL_DISTANCE = 75;
+    // Vertical distance should not be more than a fraction of the horizontal distance.
+    var MAX_VERTICAL_RATIO = 0.3;
+    // At least a 30px lateral motion is necessary for a swipe.
+    var MIN_HORIZONTAL_DISTANCE = 30;
+
+    return function(scope, element, attr) {
+      var swipeHandler = $parse(attr[directiveName]);
+
+      var startCoords, valid;
+
+      function validSwipe(coords) {
+        // Check that it's within the coordinates.
+        // Absolute vertical distance must be within tolerances.
+        // Horizontal distance, we take the current X - the starting X.
+        // This is negative for leftward swipes and positive for rightward swipes.
+        // After multiplying by the direction (-1 for left, +1 for right), legal swipes
+        // (ie. same direction as the directive wants) will have a positive delta and
+        // illegal ones a negative delta.
+        // Therefore this delta must be positive, and larger than the minimum.
+        if (!startCoords) return false;
+        var deltaY = Math.abs(coords.y - startCoords.y);
+        var deltaX = (coords.x - startCoords.x) * direction;
+        return valid && // Short circuit for already-invalidated swipes.
+            deltaY < MAX_VERTICAL_DISTANCE &&
+            deltaX > 0 &&
+            deltaX > MIN_HORIZONTAL_DISTANCE &&
+            deltaY / deltaX < MAX_VERTICAL_RATIO;
+      }
+
+      var pointerTypes = ['touch'];
+      if (!angular.isDefined(attr['ngSwipeDisableMouse'])) {
+        pointerTypes.push('mouse');
+      }
+      $swipe.bind(element, {
+        'start': function(coords, event) {
+          startCoords = coords;
+          valid = true;
+        },
+        'cancel': function(event) {
+          valid = false;
+        },
+        'end': function(coords, event) {
+          if (validSwipe(coords)) {
+            scope.$apply(function() {
+              element.triggerHandler(eventName);
+              swipeHandler(scope, {$event: event});
+            });
+          }
+        }
+      }, pointerTypes);
+    };
+  }]);
+}
+
+// Left is negative X-coordinate, right is positive.
+makeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');
+makeSwipeDirective('ngSwipeRight', 1, 'swiperight');
+
+
+
+})(window, window.angular);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js
new file mode 100644
index 0000000..d17a032
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js
@@ -0,0 +1,14 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(x,n,y){'use strict';function s(f,k){var e=!1,a=!1;this.ngClickOverrideEnabled=function(b){return n.isDefined(b)?(b&&!a&&(a=!0,t.$$moduleName="ngTouch",k.directive("ngClick",t),f.decorator("ngClickDirective",["$delegate",function(a){if(e)a.shift();else for(var b=a.length-1;0<=b;){if("ngTouch"===a[b].$$moduleName){a.splice(b,1);break}b--}return a}])),e=b,this):e};this.$get=function(){return{ngClickOverrideEnabled:function(){return e}}}}function v(f,k,e){p.directive(f,["$parse","$swipe",function(a,
+b){return function(l,u,g){function h(c){if(!d)return!1;var a=Math.abs(c.y-d.y);c=(c.x-d.x)*k;return r&&75>a&&0<c&&30<c&&.3>a/c}var m=a(g[f]),d,r,c=["touch"];n.isDefined(g.ngSwipeDisableMouse)||c.push("mouse");b.bind(u,{start:function(c,a){d=c;r=!0},cancel:function(c){r=!1},end:function(c,d){h(c)&&l.$apply(function(){u.triggerHandler(e);m(l,{$event:d})})}},c)}}])}var p=n.module("ngTouch",[]);p.provider("$touch",s);s.$inject=["$provide","$compileProvider"];p.factory("$swipe",[function(){function f(a){a=
+a.originalEvent||a;var b=a.touches&&a.touches.length?a.touches:[a];a=a.changedTouches&&a.changedTouches[0]||b[0];return{x:a.clientX,y:a.clientY}}function k(a,b){var l=[];n.forEach(a,function(a){(a=e[a][b])&&l.push(a)});return l.join(" ")}var e={mouse:{start:"mousedown",move:"mousemove",end:"mouseup"},touch:{start:"touchstart",move:"touchmove",end:"touchend",cancel:"touchcancel"}};return{bind:function(a,b,l){var e,g,h,m,d=!1;l=l||["mouse","touch"];a.on(k(l,"start"),function(c){h=f(c);d=!0;g=e=0;m=
+h;b.start&&b.start(h,c)});var r=k(l,"cancel");if(r)a.on(r,function(c){d=!1;b.cancel&&b.cancel(c)});a.on(k(l,"move"),function(c){if(d&&h){var a=f(c);e+=Math.abs(a.x-m.x);g+=Math.abs(a.y-m.y);m=a;10>e&&10>g||(g>e?(d=!1,b.cancel&&b.cancel(c)):(c.preventDefault(),b.move&&b.move(a,c)))}});a.on(k(l,"end"),function(c){d&&(d=!1,b.end&&b.end(f(c),c))})}}}]);var t=["$parse","$timeout","$rootElement",function(f,k,e){function a(a,d,b){for(var c=0;c<a.length;c+=2){var g=a[c+1],e=b;if(25>Math.abs(a[c]-d)&&25>Math.abs(g-
+e))return a.splice(c,c+2),!0}return!1}function b(b){if(!(2500<Date.now()-u)){var d=b.touches&&b.touches.length?b.touches:[b],e=d[0].clientX,d=d[0].clientY;if(!(1>e&&1>d||h&&h[0]===e&&h[1]===d)){h&&(h=null);var c=b.target;"label"===n.lowercase(c.nodeName||c[0]&&c[0].nodeName)&&(h=[e,d]);a(g,e,d)||(b.stopPropagation(),b.preventDefault(),b.target&&b.target.blur&&b.target.blur())}}}function l(a){a=a.touches&&a.touches.length?a.touches:[a];var b=a[0].clientX,e=a[0].clientY;g.push(b,e);k(function(){for(var a=
+0;a<g.length;a+=2)if(g[a]==b&&g[a+1]==e){g.splice(a,a+2);break}},2500,!1)}var u,g,h;return function(h,d,k){var c=f(k.ngClick),w=!1,q,p,s,t;d.on("touchstart",function(a){w=!0;q=a.target?a.target:a.srcElement;3==q.nodeType&&(q=q.parentNode);d.addClass("ng-click-active");p=Date.now();a=a.originalEvent||a;a=(a.touches&&a.touches.length?a.touches:[a])[0];s=a.clientX;t=a.clientY});d.on("touchcancel",function(a){w=!1;d.removeClass("ng-click-active")});d.on("touchend",function(c){var h=Date.now()-p,f=c.originalEvent||
+c,m=(f.changedTouches&&f.changedTouches.length?f.changedTouches:f.touches&&f.touches.length?f.touches:[f])[0],f=m.clientX,m=m.clientY,v=Math.sqrt(Math.pow(f-s,2)+Math.pow(m-t,2));w&&750>h&&12>v&&(g||(e[0].addEventListener("click",b,!0),e[0].addEventListener("touchstart",l,!0),g=[]),u=Date.now(),a(g,f,m),q&&q.blur(),n.isDefined(k.disabled)&&!1!==k.disabled||d.triggerHandler("click",[c]));w=!1;d.removeClass("ng-click-active")});d.onclick=function(a){};d.on("click",function(a,b){h.$apply(function(){c(h,
+{$event:b||a})})});d.on("mousedown",function(a){d.addClass("ng-click-active")});d.on("mousemove mouseup",function(a){d.removeClass("ng-click-active")})}}];v("ngSwipeLeft",-1,"swipeleft");v("ngSwipeRight",1,"swiperight")})(window,window.angular);
+//# sourceMappingURL=angular-touch.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js.map
new file mode 100644
index 0000000..9267ec8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-touch.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-touch.min.js",
+"lineCount":13,
+"mappings":"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",
+"sources":["angular-touch.js"],
+"names":["window","angular","undefined","$TouchProvider","$provide","$compileProvider","ngClickOverrideEnabled","ngClickDirectiveAdded","this.ngClickOverrideEnabled","enabled","isDefined","ngTouchClickDirectiveFactory","$$moduleName","directive","decorator","$delegate","shift","i","length","splice","$get","this.$get","makeSwipeDirective","directiveName","direction","eventName","ngTouch","$parse","$swipe","scope","element","attr","validSwipe","coords","startCoords","deltaY","Math","abs","y","deltaX","x","valid","MAX_VERTICAL_DISTANCE","MIN_HORIZONTAL_DISTANCE","MAX_VERTICAL_RATIO","swipeHandler","pointerTypes","push","bind","start","event","cancel","end","$apply","triggerHandler","$event","module","provider","$inject","factory","getCoordinates","originalEvent","touches","e","changedTouches","clientX","clientY","getEvents","eventType","res","forEach","pointerType","POINTER_EVENTS","join","move","eventHandlers","totalX","totalY","lastPos","active","on","events","MOVE_BUFFER_RADIUS","pr
 eventDefault","$timeout","$rootElement","checkAllowableRegions","touchCoordinates","CLICKBUSTER_THRESHOLD","x1","y1","y2","onClick","PREVENT_DURATION","Date","now","lastPreventedTime","lastLabelClickCoordinates","target","lowercase","nodeName","stopPropagation","blur","onTouchStart","clickHandler","ngClick","tapping","tapElement","startTime","touchStartX","touchStartY","srcElement","nodeType","parentNode","addClass","ACTIVE_CLASS_NAME","removeClass","diff","dist","sqrt","pow","TAP_DURATION","MOVE_TOLERANCE","addEventListener","disabled","onclick","element.onclick","touchend"]
+}


[19/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-ba.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-ba.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-ba.js
new file mode 100644
index 0000000..a01047f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-ba.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "nedjelja",
+      "ponedjeljak",
+      "utorak",
+      "srijeda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Prije Krista",
+      "Poslije Krista"
+    ],
+    "ERAS": [
+      "pr. Kr.",
+      "p. Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "sije\u010dnja",
+      "velja\u010de",
+      "o\u017eujka",
+      "travnja",
+      "svibnja",
+      "lipnja",
+      "srpnja",
+      "kolovoza",
+      "rujna",
+      "listopada",
+      "studenoga",
+      "prosinca"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sri",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "sij",
+      "velj",
+      "o\u017eu",
+      "tra",
+      "svi",
+      "lip",
+      "srp",
+      "kol",
+      "ruj",
+      "lis",
+      "stu",
+      "pro"
+    ],
+    "STANDALONEMONTH": [
+      "sije\u010danj",
+      "velja\u010da",
+      "o\u017eujak",
+      "travanj",
+      "svibanj",
+      "lipanj",
+      "srpanj",
+      "kolovoz",
+      "rujan",
+      "listopad",
+      "studeni",
+      "prosinac"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y.",
+    "longDate": "d. MMMM y.",
+    "medium": "d. MMM y. HH:mm:ss",
+    "mediumDate": "d. MMM y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y. HH:mm",
+    "shortDate": "dd.MM.y.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hr-ba",
+  "localeID": "hr_BA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-hr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-hr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-hr.js
new file mode 100644
index 0000000..31f0059
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr-hr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "nedjelja",
+      "ponedjeljak",
+      "utorak",
+      "srijeda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Prije Krista",
+      "Poslije Krista"
+    ],
+    "ERAS": [
+      "pr. Kr.",
+      "p. Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "sije\u010dnja",
+      "velja\u010de",
+      "o\u017eujka",
+      "travnja",
+      "svibnja",
+      "lipnja",
+      "srpnja",
+      "kolovoza",
+      "rujna",
+      "listopada",
+      "studenoga",
+      "prosinca"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sri",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "sij",
+      "velj",
+      "o\u017eu",
+      "tra",
+      "svi",
+      "lip",
+      "srp",
+      "kol",
+      "ruj",
+      "lis",
+      "stu",
+      "pro"
+    ],
+    "STANDALONEMONTH": [
+      "sije\u010danj",
+      "velja\u010da",
+      "o\u017eujak",
+      "travanj",
+      "svibanj",
+      "lipanj",
+      "srpanj",
+      "kolovoz",
+      "rujan",
+      "listopad",
+      "studeni",
+      "prosinac"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y.",
+    "longDate": "d. MMMM y.",
+    "medium": "d. MMM y. HH:mm:ss",
+    "mediumDate": "d. MMM y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y. HH:mm",
+    "shortDate": "dd.MM.y.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kn",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hr-hr",
+  "localeID": "hr_HR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr.js
new file mode 100644
index 0000000..d56c770
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "nedjelja",
+      "ponedjeljak",
+      "utorak",
+      "srijeda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Prije Krista",
+      "Poslije Krista"
+    ],
+    "ERAS": [
+      "pr. Kr.",
+      "p. Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "sije\u010dnja",
+      "velja\u010de",
+      "o\u017eujka",
+      "travnja",
+      "svibnja",
+      "lipnja",
+      "srpnja",
+      "kolovoza",
+      "rujna",
+      "listopada",
+      "studenoga",
+      "prosinca"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sri",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "sij",
+      "velj",
+      "o\u017eu",
+      "tra",
+      "svi",
+      "lip",
+      "srp",
+      "kol",
+      "ruj",
+      "lis",
+      "stu",
+      "pro"
+    ],
+    "STANDALONEMONTH": [
+      "sije\u010danj",
+      "velja\u010da",
+      "o\u017eujak",
+      "travanj",
+      "svibanj",
+      "lipanj",
+      "srpanj",
+      "kolovoz",
+      "rujan",
+      "listopad",
+      "studeni",
+      "prosinac"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y.",
+    "longDate": "d. MMMM y.",
+    "medium": "d. MMM y. HH:mm:ss",
+    "mediumDate": "d. MMM y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y. HH:mm",
+    "shortDate": "dd.MM.y.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kn",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hr",
+  "localeID": "hr",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb-de.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb-de.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb-de.js
new file mode 100644
index 0000000..5e5ff8d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb-de.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopo\u0142dnja",
+      "popo\u0142dnju"
+    ],
+    "DAY": [
+      "njed\u017aela",
+      "p\u00f3nd\u017aela",
+      "wutora",
+      "srjeda",
+      "\u0161tw\u00f3rtk",
+      "pjatk",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p\u0159ed Chrystowym narod\u017aenjom",
+      "po Chrystowym narod\u017aenju"
+    ],
+    "ERAS": [
+      "p\u0159.Chr.n.",
+      "po Chr.n."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januara",
+      "februara",
+      "m\u011brca",
+      "apryla",
+      "meje",
+      "junija",
+      "julija",
+      "awgusta",
+      "septembra",
+      "oktobra",
+      "nowembra",
+      "decembra"
+    ],
+    "SHORTDAY": [
+      "nje",
+      "p\u00f3n",
+      "wut",
+      "srj",
+      "\u0161tw",
+      "pja",
+      "sob"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "m\u011br.",
+      "apr.",
+      "mej.",
+      "jun.",
+      "jul.",
+      "awg.",
+      "sep.",
+      "okt.",
+      "now.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "m\u011brc",
+      "apryl",
+      "meja",
+      "junij",
+      "julij",
+      "awgust",
+      "september",
+      "oktober",
+      "nowember",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d.M.y H:mm:ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "H:mm:ss",
+    "short": "d.M.yy H:mm 'hod\u017a'.",
+    "shortDate": "d.M.yy",
+    "shortTime": "H:mm 'hod\u017a'."
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hsb-de",
+  "localeID": "hsb_DE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb.js
new file mode 100644
index 0000000..513d701
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hsb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopo\u0142dnja",
+      "popo\u0142dnju"
+    ],
+    "DAY": [
+      "njed\u017aela",
+      "p\u00f3nd\u017aela",
+      "wutora",
+      "srjeda",
+      "\u0161tw\u00f3rtk",
+      "pjatk",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p\u0159ed Chrystowym narod\u017aenjom",
+      "po Chrystowym narod\u017aenju"
+    ],
+    "ERAS": [
+      "p\u0159.Chr.n.",
+      "po Chr.n."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januara",
+      "februara",
+      "m\u011brca",
+      "apryla",
+      "meje",
+      "junija",
+      "julija",
+      "awgusta",
+      "septembra",
+      "oktobra",
+      "nowembra",
+      "decembra"
+    ],
+    "SHORTDAY": [
+      "nje",
+      "p\u00f3n",
+      "wut",
+      "srj",
+      "\u0161tw",
+      "pja",
+      "sob"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "m\u011br.",
+      "apr.",
+      "mej.",
+      "jun.",
+      "jul.",
+      "awg.",
+      "sep.",
+      "okt.",
+      "now.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "m\u011brc",
+      "apryl",
+      "meja",
+      "junij",
+      "julij",
+      "awgust",
+      "september",
+      "oktober",
+      "nowember",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d.M.y H:mm:ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "H:mm:ss",
+    "short": "d.M.yy H:mm 'hod\u017a'.",
+    "shortDate": "d.M.yy",
+    "shortTime": "H:mm 'hod\u017a'."
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hsb",
+  "localeID": "hsb",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu-hu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu-hu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu-hu.js
new file mode 100644
index 0000000..9d0bd6d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu-hu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "de.",
+      "du."
+    ],
+    "DAY": [
+      "vas\u00e1rnap",
+      "h\u00e9tf\u0151",
+      "kedd",
+      "szerda",
+      "cs\u00fct\u00f6rt\u00f6k",
+      "p\u00e9ntek",
+      "szombat"
+    ],
+    "ERANAMES": [
+      "id\u0151sz\u00e1m\u00edt\u00e1sunk el\u0151tt",
+      "id\u0151sz\u00e1m\u00edt\u00e1sunk szerint"
+    ],
+    "ERAS": [
+      "i. e.",
+      "i. sz."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janu\u00e1r",
+      "febru\u00e1r",
+      "m\u00e1rcius",
+      "\u00e1prilis",
+      "m\u00e1jus",
+      "j\u00fanius",
+      "j\u00falius",
+      "augusztus",
+      "szeptember",
+      "okt\u00f3ber",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "V",
+      "H",
+      "K",
+      "Sze",
+      "Cs",
+      "P",
+      "Szo"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "febr.",
+      "m\u00e1rc.",
+      "\u00e1pr.",
+      "m\u00e1j.",
+      "j\u00fan.",
+      "j\u00fal.",
+      "aug.",
+      "szept.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "janu\u00e1r",
+      "febru\u00e1r",
+      "m\u00e1rcius",
+      "\u00e1prilis",
+      "m\u00e1jus",
+      "j\u00fanius",
+      "j\u00falius",
+      "augusztus",
+      "szeptember",
+      "okt\u00f3ber",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y. MMMM d., EEEE",
+    "longDate": "y. MMMM d.",
+    "medium": "y. MMM d. H:mm:ss",
+    "mediumDate": "y. MMM d.",
+    "mediumTime": "H:mm:ss",
+    "short": "y. MM. dd. H:mm",
+    "shortDate": "y. MM. dd.",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ft",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hu-hu",
+  "localeID": "hu_HU",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu.js
new file mode 100644
index 0000000..6fe1ec1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "de.",
+      "du."
+    ],
+    "DAY": [
+      "vas\u00e1rnap",
+      "h\u00e9tf\u0151",
+      "kedd",
+      "szerda",
+      "cs\u00fct\u00f6rt\u00f6k",
+      "p\u00e9ntek",
+      "szombat"
+    ],
+    "ERANAMES": [
+      "id\u0151sz\u00e1m\u00edt\u00e1sunk el\u0151tt",
+      "id\u0151sz\u00e1m\u00edt\u00e1sunk szerint"
+    ],
+    "ERAS": [
+      "i. e.",
+      "i. sz."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janu\u00e1r",
+      "febru\u00e1r",
+      "m\u00e1rcius",
+      "\u00e1prilis",
+      "m\u00e1jus",
+      "j\u00fanius",
+      "j\u00falius",
+      "augusztus",
+      "szeptember",
+      "okt\u00f3ber",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "V",
+      "H",
+      "K",
+      "Sze",
+      "Cs",
+      "P",
+      "Szo"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "febr.",
+      "m\u00e1rc.",
+      "\u00e1pr.",
+      "m\u00e1j.",
+      "j\u00fan.",
+      "j\u00fal.",
+      "aug.",
+      "szept.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "janu\u00e1r",
+      "febru\u00e1r",
+      "m\u00e1rcius",
+      "\u00e1prilis",
+      "m\u00e1jus",
+      "j\u00fanius",
+      "j\u00falius",
+      "augusztus",
+      "szeptember",
+      "okt\u00f3ber",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y. MMMM d., EEEE",
+    "longDate": "y. MMMM d.",
+    "medium": "y. MMM d. H:mm:ss",
+    "mediumDate": "y. MMM d.",
+    "mediumTime": "H:mm:ss",
+    "short": "y. MM. dd. H:mm",
+    "shortDate": "y. MM. dd.",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ft",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hu",
+  "localeID": "hu",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy-am.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy-am.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy-am.js
new file mode 100644
index 0000000..a11f55a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy-am.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0561\u057c\u0561\u057b",
+      "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0570\u0565\u057f\u0578"
+    ],
+    "DAY": [
+      "\u056f\u056b\u0580\u0561\u056f\u056b",
+      "\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b",
+      "\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b",
+      "\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b",
+      "\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b",
+      "\u0578\u0582\u0580\u0562\u0561\u0569",
+      "\u0577\u0561\u0562\u0561\u0569"
+    ],
+    "ERANAMES": [
+      "\u0574.\u0569.\u0561.",
+      "\u0574.\u0569."
+    ],
+    "ERAS": [
+      "\u0574.\u0569.\u0561.",
+      "\u0574.\u0569."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b",
+      "\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b",
+      "\u0574\u0561\u0580\u057f\u056b",
+      "\u0561\u057a\u0580\u056b\u056c\u056b",
+      "\u0574\u0561\u0575\u056b\u057d\u056b",
+      "\u0570\u0578\u0582\u0576\u056b\u057d\u056b",
+      "\u0570\u0578\u0582\u056c\u056b\u057d\u056b",
+      "\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b",
+      "\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b",
+      "\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b",
+      "\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b",
+      "\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b"
+    ],
+    "SHORTDAY": [
+      "\u056f\u056b\u0580",
+      "\u0565\u0580\u056f",
+      "\u0565\u0580\u0584",
+      "\u0579\u0580\u0584",
+      "\u0570\u0576\u0563",
+      "\u0578\u0582\u0580",
+      "\u0577\u0562\u0569"
+    ],
+    "SHORTMONTH": [
+      "\u0570\u0576\u057e",
+      "\u0583\u057f\u057e",
+      "\u0574\u0580\u057f",
+      "\u0561\u057a\u0580",
+      "\u0574\u0575\u057d",
+      "\u0570\u0576\u057d",
+      "\u0570\u056c\u057d",
+      "\u0585\u0563\u057d",
+      "\u057d\u0565\u057a",
+      "\u0570\u0578\u056f",
+      "\u0576\u0578\u0575",
+      "\u0564\u0565\u056f"
+    ],
+    "STANDALONEMONTH": [
+      "\u0570\u0578\u0582\u0576\u057e\u0561\u0580",
+      "\u0583\u0565\u057f\u0580\u057e\u0561\u0580",
+      "\u0574\u0561\u0580\u057f",
+      "\u0561\u057a\u0580\u056b\u056c",
+      "\u0574\u0561\u0575\u056b\u057d",
+      "\u0570\u0578\u0582\u0576\u056b\u057d",
+      "\u0570\u0578\u0582\u056c\u056b\u057d",
+      "\u0585\u0563\u0578\u057d\u057f\u0578\u057d",
+      "\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580",
+      "\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580",
+      "\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580",
+      "\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u0569. MMMM d, EEEE",
+    "longDate": "dd MMMM, y\u0569.",
+    "medium": "dd MMM, y\u0569. H:mm:ss",
+    "mediumDate": "dd MMM, y\u0569.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Dram",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 0,
+        "lgSize": 0,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 0,
+        "lgSize": 0,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hy-am",
+  "localeID": "hy_AM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy.js
new file mode 100644
index 0000000..8e49339
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hy.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0561\u057c\u0561\u057b",
+      "\u056f\u0565\u057d\u0585\u0580\u056b\u0581 \u0570\u0565\u057f\u0578"
+    ],
+    "DAY": [
+      "\u056f\u056b\u0580\u0561\u056f\u056b",
+      "\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b",
+      "\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b",
+      "\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b",
+      "\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b",
+      "\u0578\u0582\u0580\u0562\u0561\u0569",
+      "\u0577\u0561\u0562\u0561\u0569"
+    ],
+    "ERANAMES": [
+      "\u0574.\u0569.\u0561.",
+      "\u0574.\u0569."
+    ],
+    "ERAS": [
+      "\u0574.\u0569.\u0561.",
+      "\u0574.\u0569."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b",
+      "\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b",
+      "\u0574\u0561\u0580\u057f\u056b",
+      "\u0561\u057a\u0580\u056b\u056c\u056b",
+      "\u0574\u0561\u0575\u056b\u057d\u056b",
+      "\u0570\u0578\u0582\u0576\u056b\u057d\u056b",
+      "\u0570\u0578\u0582\u056c\u056b\u057d\u056b",
+      "\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b",
+      "\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b",
+      "\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b",
+      "\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b",
+      "\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b"
+    ],
+    "SHORTDAY": [
+      "\u056f\u056b\u0580",
+      "\u0565\u0580\u056f",
+      "\u0565\u0580\u0584",
+      "\u0579\u0580\u0584",
+      "\u0570\u0576\u0563",
+      "\u0578\u0582\u0580",
+      "\u0577\u0562\u0569"
+    ],
+    "SHORTMONTH": [
+      "\u0570\u0576\u057e",
+      "\u0583\u057f\u057e",
+      "\u0574\u0580\u057f",
+      "\u0561\u057a\u0580",
+      "\u0574\u0575\u057d",
+      "\u0570\u0576\u057d",
+      "\u0570\u056c\u057d",
+      "\u0585\u0563\u057d",
+      "\u057d\u0565\u057a",
+      "\u0570\u0578\u056f",
+      "\u0576\u0578\u0575",
+      "\u0564\u0565\u056f"
+    ],
+    "STANDALONEMONTH": [
+      "\u0570\u0578\u0582\u0576\u057e\u0561\u0580",
+      "\u0583\u0565\u057f\u0580\u057e\u0561\u0580",
+      "\u0574\u0561\u0580\u057f",
+      "\u0561\u057a\u0580\u056b\u056c",
+      "\u0574\u0561\u0575\u056b\u057d",
+      "\u0570\u0578\u0582\u0576\u056b\u057d",
+      "\u0570\u0578\u0582\u056c\u056b\u057d",
+      "\u0585\u0563\u0578\u057d\u057f\u0578\u057d",
+      "\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580",
+      "\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580",
+      "\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580",
+      "\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u0569. MMMM d, EEEE",
+    "longDate": "dd MMMM, y\u0569.",
+    "medium": "dd MMM, y\u0569. H:mm:ss",
+    "mediumDate": "dd MMM, y\u0569.",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Dram",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 0,
+        "lgSize": 0,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 0,
+        "lgSize": 0,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "hy",
+  "localeID": "hy",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia-fr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia-fr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia-fr.js
new file mode 100644
index 0000000..f7b636b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia-fr.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "dominica",
+      "lunedi",
+      "martedi",
+      "mercuridi",
+      "jovedi",
+      "venerdi",
+      "sabbato"
+    ],
+    "ERANAMES": [
+      "ante Christo",
+      "post Christo"
+    ],
+    "ERAS": [
+      "a.Chr.",
+      "p.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januario",
+      "februario",
+      "martio",
+      "april",
+      "maio",
+      "junio",
+      "julio",
+      "augusto",
+      "septembre",
+      "octobre",
+      "novembre",
+      "decembre"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mer",
+      "jov",
+      "ven",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "mai",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "oct",
+      "nov",
+      "dec"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ia-fr",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia.js
new file mode 100644
index 0000000..38ead22
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ia.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "dominica",
+      "lunedi",
+      "martedi",
+      "mercuridi",
+      "jovedi",
+      "venerdi",
+      "sabbato"
+    ],
+    "ERANAMES": [
+      "ante Christo",
+      "post Christo"
+    ],
+    "ERAS": [
+      "a.Chr.",
+      "p.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januario",
+      "februario",
+      "martio",
+      "april",
+      "maio",
+      "junio",
+      "julio",
+      "augusto",
+      "septembre",
+      "octobre",
+      "novembre",
+      "decembre"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mer",
+      "jov",
+      "ven",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "mai",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "oct",
+      "nov",
+      "dec"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ia",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id-id.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id-id.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id-id.js
new file mode 100644
index 0000000..021ede1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id-id.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Minggu",
+      "Senin",
+      "Selasa",
+      "Rabu",
+      "Kamis",
+      "Jumat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "Sebelum Masehi",
+      "M"
+    ],
+    "ERAS": [
+      "SM",
+      "M"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Maret",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Agustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "SHORTDAY": [
+      "Min",
+      "Sen",
+      "Sel",
+      "Rab",
+      "Kam",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Agt",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maret",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Agustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH.mm.ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd/MM/yy HH.mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rp",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "id-id",
+  "localeID": "id_ID",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id.js
new file mode 100644
index 0000000..09a2c51
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_id.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Minggu",
+      "Senin",
+      "Selasa",
+      "Rabu",
+      "Kamis",
+      "Jumat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "Sebelum Masehi",
+      "M"
+    ],
+    "ERAS": [
+      "SM",
+      "M"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Maret",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Agustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "SHORTDAY": [
+      "Min",
+      "Sen",
+      "Sel",
+      "Rab",
+      "Kam",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Agt",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maret",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Agustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH.mm.ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd/MM/yy HH.mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rp",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "id",
+  "localeID": "id",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig-ng.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig-ng.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig-ng.js
new file mode 100644
index 0000000..c6691f9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig-ng.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "A.M.",
+      "P.M."
+    ],
+    "DAY": [
+      "Mb\u1ecds\u1ecb \u1ee4ka",
+      "M\u1ecdnde",
+      "Tiuzdee",
+      "Wenezdee",
+      "T\u1ecd\u1ecdzdee",
+      "Fra\u1ecbdee",
+      "Sat\u1ecddee"
+    ],
+    "ERANAMES": [
+      "Tupu Kristi",
+      "Af\u1ecd Kristi"
+    ],
+    "ERAS": [
+      "T.K.",
+      "A.K."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jen\u1ee5war\u1ecb",
+      "Febr\u1ee5war\u1ecb",
+      "Maach\u1ecb",
+      "Eprel",
+      "Mee",
+      "Juun",
+      "Jula\u1ecb",
+      "\u1eccg\u1ecd\u1ecdst",
+      "Septemba",
+      "\u1eccktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "\u1ee4ka",
+      "M\u1ecdn",
+      "Tiu",
+      "Wen",
+      "T\u1ecd\u1ecd",
+      "Fra\u1ecb",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jen",
+      "Feb",
+      "Maa",
+      "Epr",
+      "Mee",
+      "Juu",
+      "Jul",
+      "\u1eccg\u1ecd",
+      "Sep",
+      "\u1ecckt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Jen\u1ee5war\u1ecb",
+      "Febr\u1ee5war\u1ecb",
+      "Maach\u1ecb",
+      "Eprel",
+      "Mee",
+      "Juun",
+      "Jula\u1ecb",
+      "\u1eccg\u1ecd\u1ecdst",
+      "Septemba",
+      "\u1eccktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ig-ng",
+  "localeID": "ig_NG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig.js
new file mode 100644
index 0000000..040376f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ig.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "A.M.",
+      "P.M."
+    ],
+    "DAY": [
+      "Mb\u1ecds\u1ecb \u1ee4ka",
+      "M\u1ecdnde",
+      "Tiuzdee",
+      "Wenezdee",
+      "T\u1ecd\u1ecdzdee",
+      "Fra\u1ecbdee",
+      "Sat\u1ecddee"
+    ],
+    "ERANAMES": [
+      "Tupu Kristi",
+      "Af\u1ecd Kristi"
+    ],
+    "ERAS": [
+      "T.K.",
+      "A.K."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jen\u1ee5war\u1ecb",
+      "Febr\u1ee5war\u1ecb",
+      "Maach\u1ecb",
+      "Eprel",
+      "Mee",
+      "Juun",
+      "Jula\u1ecb",
+      "\u1eccg\u1ecd\u1ecdst",
+      "Septemba",
+      "\u1eccktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "\u1ee4ka",
+      "M\u1ecdn",
+      "Tiu",
+      "Wen",
+      "T\u1ecd\u1ecd",
+      "Fra\u1ecb",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jen",
+      "Feb",
+      "Maa",
+      "Epr",
+      "Mee",
+      "Juu",
+      "Jul",
+      "\u1eccg\u1ecd",
+      "Sep",
+      "\u1ecckt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Jen\u1ee5war\u1ecb",
+      "Febr\u1ee5war\u1ecb",
+      "Maach\u1ecb",
+      "Eprel",
+      "Mee",
+      "Juun",
+      "Jula\u1ecb",
+      "\u1eccg\u1ecd\u1ecdst",
+      "Septemba",
+      "\u1eccktoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ig",
+  "localeID": "ig",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii-cn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii-cn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii-cn.js
new file mode 100644
index 0000000..a4d6c3b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii-cn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\ua3b8\ua111",
+      "\ua06f\ua2d2"
+    ],
+    "DAY": [
+      "\ua46d\ua18f\ua44d",
+      "\ua18f\ua282\ua2cd",
+      "\ua18f\ua282\ua44d",
+      "\ua18f\ua282\ua315",
+      "\ua18f\ua282\ua1d6",
+      "\ua18f\ua282\ua26c",
+      "\ua18f\ua282\ua0d8"
+    ],
+    "ERANAMES": [
+      "\ua0c5\ua2ca\ua0bf",
+      "\ua0c5\ua2ca\ua282"
+    ],
+    "ERAS": [
+      "\ua0c5\ua2ca\ua0bf",
+      "\ua0c5\ua2ca\ua282"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\ua2cd\ua1aa",
+      "\ua44d\ua1aa",
+      "\ua315\ua1aa",
+      "\ua1d6\ua1aa",
+      "\ua26c\ua1aa",
+      "\ua0d8\ua1aa",
+      "\ua3c3\ua1aa",
+      "\ua246\ua1aa",
+      "\ua22c\ua1aa",
+      "\ua2b0\ua1aa",
+      "\ua2b0\ua2aa\ua1aa",
+      "\ua2b0\ua44b\ua1aa"
+    ],
+    "SHORTDAY": [
+      "\ua46d\ua18f",
+      "\ua18f\ua2cd",
+      "\ua18f\ua44d",
+      "\ua18f\ua315",
+      "\ua18f\ua1d6",
+      "\ua18f\ua26c",
+      "\ua18f\ua0d8"
+    ],
+    "SHORTMONTH": [
+      "1",
+      "2",
+      "3",
+      "4",
+      "5",
+      "6",
+      "7",
+      "8",
+      "9",
+      "10",
+      "11",
+      "12"
+    ],
+    "STANDALONEMONTH": [
+      "\ua2cd\ua1aa",
+      "\ua44d\ua1aa",
+      "\ua315\ua1aa",
+      "\ua1d6\ua1aa",
+      "\ua26c\ua1aa",
+      "\ua0d8\ua1aa",
+      "\ua3c3\ua1aa",
+      "\ua246\ua1aa",
+      "\ua22c\ua1aa",
+      "\ua2b0\ua1aa",
+      "\ua2b0\ua2aa\ua1aa",
+      "\ua2b0\ua44b\ua1aa"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ii-cn",
+  "localeID": "ii_CN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii.js
new file mode 100644
index 0000000..3929d88
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ii.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\ua3b8\ua111",
+      "\ua06f\ua2d2"
+    ],
+    "DAY": [
+      "\ua46d\ua18f\ua44d",
+      "\ua18f\ua282\ua2cd",
+      "\ua18f\ua282\ua44d",
+      "\ua18f\ua282\ua315",
+      "\ua18f\ua282\ua1d6",
+      "\ua18f\ua282\ua26c",
+      "\ua18f\ua282\ua0d8"
+    ],
+    "ERANAMES": [
+      "\ua0c5\ua2ca\ua0bf",
+      "\ua0c5\ua2ca\ua282"
+    ],
+    "ERAS": [
+      "\ua0c5\ua2ca\ua0bf",
+      "\ua0c5\ua2ca\ua282"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\ua2cd\ua1aa",
+      "\ua44d\ua1aa",
+      "\ua315\ua1aa",
+      "\ua1d6\ua1aa",
+      "\ua26c\ua1aa",
+      "\ua0d8\ua1aa",
+      "\ua3c3\ua1aa",
+      "\ua246\ua1aa",
+      "\ua22c\ua1aa",
+      "\ua2b0\ua1aa",
+      "\ua2b0\ua2aa\ua1aa",
+      "\ua2b0\ua44b\ua1aa"
+    ],
+    "SHORTDAY": [
+      "\ua46d\ua18f",
+      "\ua18f\ua2cd",
+      "\ua18f\ua44d",
+      "\ua18f\ua315",
+      "\ua18f\ua1d6",
+      "\ua18f\ua26c",
+      "\ua18f\ua0d8"
+    ],
+    "SHORTMONTH": [
+      "1",
+      "2",
+      "3",
+      "4",
+      "5",
+      "6",
+      "7",
+      "8",
+      "9",
+      "10",
+      "11",
+      "12"
+    ],
+    "STANDALONEMONTH": [
+      "\ua2cd\ua1aa",
+      "\ua44d\ua1aa",
+      "\ua315\ua1aa",
+      "\ua1d6\ua1aa",
+      "\ua26c\ua1aa",
+      "\ua0d8\ua1aa",
+      "\ua3c3\ua1aa",
+      "\ua246\ua1aa",
+      "\ua22c\ua1aa",
+      "\ua2b0\ua1aa",
+      "\ua2b0\ua2aa\ua1aa",
+      "\ua2b0\ua44b\ua1aa"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ii",
+  "localeID": "ii",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_in.js
new file mode 100644
index 0000000..44bb3c9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Minggu",
+      "Senin",
+      "Selasa",
+      "Rabu",
+      "Kamis",
+      "Jumat",
+      "Sabtu"
+    ],
+    "ERANAMES": [
+      "Sebelum Masehi",
+      "M"
+    ],
+    "ERAS": [
+      "SM",
+      "M"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Maret",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Agustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "SHORTDAY": [
+      "Min",
+      "Sen",
+      "Sel",
+      "Rab",
+      "Kam",
+      "Jum",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Agt",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maret",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Agustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH.mm.ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd/MM/yy HH.mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rp",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "in",
+  "localeID": "in",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is-is.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is-is.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is-is.js
new file mode 100644
index 0000000..a8266d1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is-is.js
@@ -0,0 +1,156 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+function getWT(v, f) {
+  if (f === 0) {
+    return {w: 0, t: 0};
+  }
+
+  while ((f % 10) === 0) {
+    f /= 10;
+    v--;
+  }
+
+  return {w: v, t: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "f.h.",
+      "e.h."
+    ],
+    "DAY": [
+      "sunnudagur",
+      "m\u00e1nudagur",
+      "\u00feri\u00f0judagur",
+      "mi\u00f0vikudagur",
+      "fimmtudagur",
+      "f\u00f6studagur",
+      "laugardagur"
+    ],
+    "ERANAMES": [
+      "fyrir Krist",
+      "eftir Krist"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "jan\u00faar",
+      "febr\u00faar",
+      "mars",
+      "apr\u00edl",
+      "ma\u00ed",
+      "j\u00fan\u00ed",
+      "j\u00fal\u00ed",
+      "\u00e1g\u00fast",
+      "september",
+      "okt\u00f3ber",
+      "n\u00f3vember",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "sun.",
+      "m\u00e1n.",
+      "\u00feri.",
+      "mi\u00f0.",
+      "fim.",
+      "f\u00f6s.",
+      "lau."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "ma\u00ed",
+      "j\u00fan.",
+      "j\u00fal.",
+      "\u00e1g\u00fa.",
+      "sep.",
+      "okt.",
+      "n\u00f3v.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "jan\u00faar",
+      "febr\u00faar",
+      "mars",
+      "apr\u00edl",
+      "ma\u00ed",
+      "j\u00fan\u00ed",
+      "j\u00fal\u00ed",
+      "\u00e1g\u00fast",
+      "september",
+      "okt\u00f3ber",
+      "n\u00f3vember",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.y HH:mm",
+    "shortDate": "d.M.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "is-is",
+  "localeID": "is_IS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (wt.t == 0 && i % 10 == 1 && i % 100 != 11 || wt.t != 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is.js
new file mode 100644
index 0000000..8a602c2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_is.js
@@ -0,0 +1,156 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+function getWT(v, f) {
+  if (f === 0) {
+    return {w: 0, t: 0};
+  }
+
+  while ((f % 10) === 0) {
+    f /= 10;
+    v--;
+  }
+
+  return {w: v, t: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "f.h.",
+      "e.h."
+    ],
+    "DAY": [
+      "sunnudagur",
+      "m\u00e1nudagur",
+      "\u00feri\u00f0judagur",
+      "mi\u00f0vikudagur",
+      "fimmtudagur",
+      "f\u00f6studagur",
+      "laugardagur"
+    ],
+    "ERANAMES": [
+      "fyrir Krist",
+      "eftir Krist"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "jan\u00faar",
+      "febr\u00faar",
+      "mars",
+      "apr\u00edl",
+      "ma\u00ed",
+      "j\u00fan\u00ed",
+      "j\u00fal\u00ed",
+      "\u00e1g\u00fast",
+      "september",
+      "okt\u00f3ber",
+      "n\u00f3vember",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "sun.",
+      "m\u00e1n.",
+      "\u00feri.",
+      "mi\u00f0.",
+      "fim.",
+      "f\u00f6s.",
+      "lau."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "ma\u00ed",
+      "j\u00fan.",
+      "j\u00fal.",
+      "\u00e1g\u00fa.",
+      "sep.",
+      "okt.",
+      "n\u00f3v.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "jan\u00faar",
+      "febr\u00faar",
+      "mars",
+      "apr\u00edl",
+      "ma\u00ed",
+      "j\u00fan\u00ed",
+      "j\u00fal\u00ed",
+      "\u00e1g\u00fast",
+      "september",
+      "okt\u00f3ber",
+      "n\u00f3vember",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.y HH:mm",
+    "shortDate": "d.M.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "is",
+  "localeID": "is",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (wt.t == 0 && i % 10 == 1 && i % 100 != 11 || wt.t != 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-ch.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-ch.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-ch.js
new file mode 100644
index 0000000..7c82748
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-ch.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domenica",
+      "luned\u00ec",
+      "marted\u00ec",
+      "mercoled\u00ec",
+      "gioved\u00ec",
+      "venerd\u00ec",
+      "sabato"
+    ],
+    "ERANAMES": [
+      "a.C.",
+      "d.C."
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "gennaio",
+      "febbraio",
+      "marzo",
+      "aprile",
+      "maggio",
+      "giugno",
+      "luglio",
+      "agosto",
+      "settembre",
+      "ottobre",
+      "novembre",
+      "dicembre"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mer",
+      "gio",
+      "ven",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "gen",
+      "feb",
+      "mar",
+      "apr",
+      "mag",
+      "giu",
+      "lug",
+      "ago",
+      "set",
+      "ott",
+      "nov",
+      "dic"
+    ],
+    "STANDALONEMONTH": [
+      "Gennaio",
+      "Febbraio",
+      "Marzo",
+      "Aprile",
+      "Maggio",
+      "Giugno",
+      "Luglio",
+      "Agosto",
+      "Settembre",
+      "Ottobre",
+      "Novembre",
+      "Dicembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d-MMM-y HH:mm:ss",
+    "mediumDate": "d-MMM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "'",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "it-ch",
+  "localeID": "it_CH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-it.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-it.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-it.js
new file mode 100644
index 0000000..cc68abe
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-it.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domenica",
+      "luned\u00ec",
+      "marted\u00ec",
+      "mercoled\u00ec",
+      "gioved\u00ec",
+      "venerd\u00ec",
+      "sabato"
+    ],
+    "ERANAMES": [
+      "a.C.",
+      "d.C."
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "gennaio",
+      "febbraio",
+      "marzo",
+      "aprile",
+      "maggio",
+      "giugno",
+      "luglio",
+      "agosto",
+      "settembre",
+      "ottobre",
+      "novembre",
+      "dicembre"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mer",
+      "gio",
+      "ven",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "gen",
+      "feb",
+      "mar",
+      "apr",
+      "mag",
+      "giu",
+      "lug",
+      "ago",
+      "set",
+      "ott",
+      "nov",
+      "dic"
+    ],
+    "STANDALONEMONTH": [
+      "Gennaio",
+      "Febbraio",
+      "Marzo",
+      "Aprile",
+      "Maggio",
+      "Giugno",
+      "Luglio",
+      "Agosto",
+      "Settembre",
+      "Ottobre",
+      "Novembre",
+      "Dicembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd MMM y HH:mm:ss",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "it-it",
+  "localeID": "it_IT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-sm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-sm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-sm.js
new file mode 100644
index 0000000..49fe7c1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_it-sm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domenica",
+      "luned\u00ec",
+      "marted\u00ec",
+      "mercoled\u00ec",
+      "gioved\u00ec",
+      "venerd\u00ec",
+      "sabato"
+    ],
+    "ERANAMES": [
+      "a.C.",
+      "d.C."
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "gennaio",
+      "febbraio",
+      "marzo",
+      "aprile",
+      "maggio",
+      "giugno",
+      "luglio",
+      "agosto",
+      "settembre",
+      "ottobre",
+      "novembre",
+      "dicembre"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "mer",
+      "gio",
+      "ven",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "gen",
+      "feb",
+      "mar",
+      "apr",
+      "mag",
+      "giu",
+      "lug",
+      "ago",
+      "set",
+      "ott",
+      "nov",
+      "dic"
+    ],
+    "STANDALONEMONTH": [
+      "Gennaio",
+      "Febbraio",
+      "Marzo",
+      "Aprile",
+      "Maggio",
+      "Giugno",
+      "Luglio",
+      "Agosto",
+      "Settembre",
+      "Ottobre",
+      "Novembre",
+      "Dicembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd MMM y HH:mm:ss",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "it-sm",
+  "localeID": "it_SM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[36/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js.map
new file mode 100644
index 0000000..07fc1ce
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular.min.js",
+"lineCount":306,
+"mappings":"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

<TRUNCATED>

[13/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt-mt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt-mt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt-mt.js
new file mode 100644
index 0000000..bb1e89d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt-mt.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Il-\u0126add",
+      "It-Tnejn",
+      "It-Tlieta",
+      "L-Erbg\u0127a",
+      "Il-\u0126amis",
+      "Il-\u0120img\u0127a",
+      "Is-Sibt"
+    ],
+    "ERANAMES": [
+      "Qabel Kristu",
+      "Wara Kristu"
+    ],
+    "ERAS": [
+      "QK",
+      "WK"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Jannar",
+      "Frar",
+      "Marzu",
+      "April",
+      "Mejju",
+      "\u0120unju",
+      "Lulju",
+      "Awwissu",
+      "Settembru",
+      "Ottubru",
+      "Novembru",
+      "Di\u010bembru"
+    ],
+    "SHORTDAY": [
+      "\u0126ad",
+      "Tne",
+      "Tli",
+      "Erb",
+      "\u0126am",
+      "\u0120im",
+      "Sib"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fra",
+      "Mar",
+      "Apr",
+      "Mej",
+      "\u0120un",
+      "Lul",
+      "Aww",
+      "Set",
+      "Ott",
+      "Nov",
+      "Di\u010b"
+    ],
+    "STANDALONEMONTH": [
+      "Jannar",
+      "Frar",
+      "Marzu",
+      "April",
+      "Mejju",
+      "\u0120unju",
+      "Lulju",
+      "Awwissu",
+      "Settembru",
+      "Ottubru",
+      "Novembru",
+      "Di\u010bembru"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'ta'\u2019 MMMM y",
+    "longDate": "d 'ta'\u2019 MMMM y",
+    "medium": "dd MMM y HH:mm:ss",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mt-mt",
+  "localeID": "mt_MT",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 0 || n % 100 >= 2 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 19) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt.js
new file mode 100644
index 0000000..48da84e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mt.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Il-\u0126add",
+      "It-Tnejn",
+      "It-Tlieta",
+      "L-Erbg\u0127a",
+      "Il-\u0126amis",
+      "Il-\u0120img\u0127a",
+      "Is-Sibt"
+    ],
+    "ERANAMES": [
+      "Qabel Kristu",
+      "Wara Kristu"
+    ],
+    "ERAS": [
+      "QK",
+      "WK"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Jannar",
+      "Frar",
+      "Marzu",
+      "April",
+      "Mejju",
+      "\u0120unju",
+      "Lulju",
+      "Awwissu",
+      "Settembru",
+      "Ottubru",
+      "Novembru",
+      "Di\u010bembru"
+    ],
+    "SHORTDAY": [
+      "\u0126ad",
+      "Tne",
+      "Tli",
+      "Erb",
+      "\u0126am",
+      "\u0120im",
+      "Sib"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fra",
+      "Mar",
+      "Apr",
+      "Mej",
+      "\u0120un",
+      "Lul",
+      "Aww",
+      "Set",
+      "Ott",
+      "Nov",
+      "Di\u010b"
+    ],
+    "STANDALONEMONTH": [
+      "Jannar",
+      "Frar",
+      "Marzu",
+      "April",
+      "Mejju",
+      "\u0120unju",
+      "Lulju",
+      "Awwissu",
+      "Settembru",
+      "Ottubru",
+      "Novembru",
+      "Di\u010bembru"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'ta'\u2019 MMMM y",
+    "longDate": "d 'ta'\u2019 MMMM y",
+    "medium": "dd MMM y HH:mm:ss",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mt",
+  "localeID": "mt",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 0 || n % 100 >= 2 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 19) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua-cm.js
new file mode 100644
index 0000000..2584507
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "comme",
+      "lilli"
+    ],
+    "DAY": [
+      "Com\u2019yakke",
+      "Comlaa\u0257ii",
+      "Comzyii\u0257ii",
+      "Comkolle",
+      "Comkald\u01dd\u0253lii",
+      "Comgaisuu",
+      "Comzye\u0253suu"
+    ],
+    "ERANAMES": [
+      "K\u01ddPel Kristu",
+      "Pel Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "PK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "F\u0129i Loo",
+      "Cokcwakla\u014bne",
+      "Cokcwaklii",
+      "F\u0129i Marfoo",
+      "Mad\u01dd\u01dduut\u01ddbija\u014b",
+      "Mam\u01dd\u014bgw\u00e3afahbii",
+      "Mam\u01dd\u014bgw\u00e3alii",
+      "Mad\u01ddmbii",
+      "F\u0129i D\u01dd\u0253lii",
+      "F\u0129i Munda\u014b",
+      "F\u0129i Gwahlle",
+      "F\u0129i Yuru"
+    ],
+    "SHORTDAY": [
+      "Cya",
+      "Cla",
+      "Czi",
+      "Cko",
+      "Cka",
+      "Cga",
+      "Cze"
+    ],
+    "SHORTMONTH": [
+      "FLO",
+      "CLA",
+      "CKI",
+      "FMF",
+      "MAD",
+      "MBI",
+      "MLI",
+      "MAM",
+      "FDE",
+      "FMU",
+      "FGW",
+      "FYU"
+    ],
+    "STANDALONEMONTH": [
+      "F\u0129i Loo",
+      "Cokcwakla\u014bne",
+      "Cokcwaklii",
+      "F\u0129i Marfoo",
+      "Mad\u01dd\u01dduut\u01ddbija\u014b",
+      "Mam\u01dd\u014bgw\u00e3afahbii",
+      "Mam\u01dd\u014bgw\u00e3alii",
+      "Mad\u01ddmbii",
+      "F\u0129i D\u01dd\u0253lii",
+      "F\u0129i Munda\u014b",
+      "F\u0129i Gwahlle",
+      "F\u0129i Yuru"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mua-cm",
+  "localeID": "mua_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua.js
new file mode 100644
index 0000000..3035de8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mua.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "comme",
+      "lilli"
+    ],
+    "DAY": [
+      "Com\u2019yakke",
+      "Comlaa\u0257ii",
+      "Comzyii\u0257ii",
+      "Comkolle",
+      "Comkald\u01dd\u0253lii",
+      "Comgaisuu",
+      "Comzye\u0253suu"
+    ],
+    "ERANAMES": [
+      "K\u01ddPel Kristu",
+      "Pel Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "PK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "F\u0129i Loo",
+      "Cokcwakla\u014bne",
+      "Cokcwaklii",
+      "F\u0129i Marfoo",
+      "Mad\u01dd\u01dduut\u01ddbija\u014b",
+      "Mam\u01dd\u014bgw\u00e3afahbii",
+      "Mam\u01dd\u014bgw\u00e3alii",
+      "Mad\u01ddmbii",
+      "F\u0129i D\u01dd\u0253lii",
+      "F\u0129i Munda\u014b",
+      "F\u0129i Gwahlle",
+      "F\u0129i Yuru"
+    ],
+    "SHORTDAY": [
+      "Cya",
+      "Cla",
+      "Czi",
+      "Cko",
+      "Cka",
+      "Cga",
+      "Cze"
+    ],
+    "SHORTMONTH": [
+      "FLO",
+      "CLA",
+      "CKI",
+      "FMF",
+      "MAD",
+      "MBI",
+      "MLI",
+      "MAM",
+      "FDE",
+      "FMU",
+      "FGW",
+      "FYU"
+    ],
+    "STANDALONEMONTH": [
+      "F\u0129i Loo",
+      "Cokcwakla\u014bne",
+      "Cokcwaklii",
+      "F\u0129i Marfoo",
+      "Mad\u01dd\u01dduut\u01ddbija\u014b",
+      "Mam\u01dd\u014bgw\u00e3afahbii",
+      "Mam\u01dd\u014bgw\u00e3alii",
+      "Mad\u01ddmbii",
+      "F\u0129i D\u01dd\u0253lii",
+      "F\u0129i Munda\u014b",
+      "F\u0129i Gwahlle",
+      "F\u0129i Yuru"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mua",
+  "localeID": "mua",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my-mm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my-mm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my-mm.js
new file mode 100644
index 0000000..f39a9d1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my-mm.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1014\u1036\u1014\u1000\u103a",
+      "\u100a\u1014\u1031"
+    ],
+    "DAY": [
+      "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031",
+      "\u1010\u1014\u1004\u103a\u1039\u101c\u102c",
+      "\u1021\u1004\u103a\u1039\u1002\u102b",
+      "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038",
+      "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038",
+      "\u101e\u1031\u102c\u1000\u103c\u102c",
+      "\u1005\u1014\u1031"
+    ],
+    "ERANAMES": [
+      "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1019\u1015\u1031\u102b\u103a\u1019\u102e\u1000\u102c\u101c",
+      "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1015\u1031\u102b\u103a\u1011\u103d\u1014\u103a\u1038\u1015\u103c\u102e\u1038\u1000\u102c\u101c"
+    ],
+    "ERAS": [
+      "\u1018\u102e\u1005\u102e",
+      "\u1021\u1031\u1012\u102e"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e",
+      "\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e",
+      "\u1019\u1010\u103a",
+      "\u1027\u1015\u103c\u102e",
+      "\u1019\u1031",
+      "\u1007\u103d\u1014\u103a",
+      "\u1007\u1030\u101c\u102d\u102f\u1004\u103a",
+      "\u1029\u1002\u102f\u1010\u103a",
+      "\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c",
+      "\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c",
+      "\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c",
+      "\u1012\u102e\u1007\u1004\u103a\u1018\u102c"
+    ],
+    "SHORTDAY": [
+      "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031",
+      "\u1010\u1014\u1004\u103a\u1039\u101c\u102c",
+      "\u1021\u1004\u103a\u1039\u1002\u102b",
+      "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038",
+      "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038",
+      "\u101e\u1031\u102c\u1000\u103c\u102c",
+      "\u1005\u1014\u1031"
+    ],
+    "SHORTMONTH": [
+      "\u1007\u1014\u103a",
+      "\u1016\u1031",
+      "\u1019\u1010\u103a",
+      "\u1027\u1015\u103c\u102e",
+      "\u1019\u1031",
+      "\u1007\u103d\u1014\u103a",
+      "\u1007\u1030",
+      "\u1029",
+      "\u1005\u1000\u103a",
+      "\u1021\u1031\u102c\u1000\u103a",
+      "\u1014\u102d\u102f",
+      "\u1012\u102e"
+    ],
+    "STANDALONEMONTH": [
+      "\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e",
+      "\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e",
+      "\u1019\u1010\u103a",
+      "\u1027\u1015\u103c\u102e",
+      "\u1019\u1031",
+      "\u1007\u103d\u1014\u103a",
+      "\u1007\u1030\u101c\u102d\u102f\u1004\u103a",
+      "\u1029\u1002\u102f\u1010\u103a",
+      "\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c",
+      "\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c",
+      "\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c",
+      "\u1012\u102e\u1007\u1004\u103a\u1018\u102c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u104a dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "K",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "my-mm",
+  "localeID": "my_MM",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my.js
new file mode 100644
index 0000000..610432e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_my.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1014\u1036\u1014\u1000\u103a",
+      "\u100a\u1014\u1031"
+    ],
+    "DAY": [
+      "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031",
+      "\u1010\u1014\u1004\u103a\u1039\u101c\u102c",
+      "\u1021\u1004\u103a\u1039\u1002\u102b",
+      "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038",
+      "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038",
+      "\u101e\u1031\u102c\u1000\u103c\u102c",
+      "\u1005\u1014\u1031"
+    ],
+    "ERANAMES": [
+      "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1019\u1015\u1031\u102b\u103a\u1019\u102e\u1000\u102c\u101c",
+      "\u1001\u101b\u1005\u103a\u1010\u1031\u102c\u103a \u1015\u1031\u102b\u103a\u1011\u103d\u1014\u103a\u1038\u1015\u103c\u102e\u1038\u1000\u102c\u101c"
+    ],
+    "ERAS": [
+      "\u1018\u102e\u1005\u102e",
+      "\u1021\u1031\u1012\u102e"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e",
+      "\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e",
+      "\u1019\u1010\u103a",
+      "\u1027\u1015\u103c\u102e",
+      "\u1019\u1031",
+      "\u1007\u103d\u1014\u103a",
+      "\u1007\u1030\u101c\u102d\u102f\u1004\u103a",
+      "\u1029\u1002\u102f\u1010\u103a",
+      "\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c",
+      "\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c",
+      "\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c",
+      "\u1012\u102e\u1007\u1004\u103a\u1018\u102c"
+    ],
+    "SHORTDAY": [
+      "\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031",
+      "\u1010\u1014\u1004\u103a\u1039\u101c\u102c",
+      "\u1021\u1004\u103a\u1039\u1002\u102b",
+      "\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038",
+      "\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038",
+      "\u101e\u1031\u102c\u1000\u103c\u102c",
+      "\u1005\u1014\u1031"
+    ],
+    "SHORTMONTH": [
+      "\u1007\u1014\u103a",
+      "\u1016\u1031",
+      "\u1019\u1010\u103a",
+      "\u1027\u1015\u103c\u102e",
+      "\u1019\u1031",
+      "\u1007\u103d\u1014\u103a",
+      "\u1007\u1030",
+      "\u1029",
+      "\u1005\u1000\u103a",
+      "\u1021\u1031\u102c\u1000\u103a",
+      "\u1014\u102d\u102f",
+      "\u1012\u102e"
+    ],
+    "STANDALONEMONTH": [
+      "\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e",
+      "\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e",
+      "\u1019\u1010\u103a",
+      "\u1027\u1015\u103c\u102e",
+      "\u1019\u1031",
+      "\u1007\u103d\u1014\u103a",
+      "\u1007\u1030\u101c\u102d\u102f\u1004\u103a",
+      "\u1029\u1002\u102f\u1010\u103a",
+      "\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c",
+      "\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c",
+      "\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c",
+      "\u1012\u102e\u1007\u1004\u103a\u1018\u102c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u104a dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "K",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "my",
+  "localeID": "my",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq-na.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq-na.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq-na.js
new file mode 100644
index 0000000..89b0ae4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq-na.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u01c1goagas",
+      "\u01c3uias"
+    ],
+    "DAY": [
+      "Sontaxtsees",
+      "Mantaxtsees",
+      "Denstaxtsees",
+      "Wunstaxtsees",
+      "Dondertaxtsees",
+      "Fraitaxtsees",
+      "Satertaxtsees"
+    ],
+    "ERANAMES": [
+      "Xristub ai\u01c3\u00e2",
+      "Xristub khao\u01c3g\u00e2"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u01c3Khanni",
+      "\u01c3Khan\u01c0g\u00f4ab",
+      "\u01c0Khuu\u01c1kh\u00e2b",
+      "\u01c3H\u00f4a\u01c2khaib",
+      "\u01c3Khaits\u00e2b",
+      "Gama\u01c0aeb",
+      "\u01c2Khoesaob",
+      "Ao\u01c1khuum\u00fb\u01c1kh\u00e2b",
+      "Tara\u01c0khuum\u00fb\u01c1kh\u00e2b",
+      "\u01c2N\u00fb\u01c1n\u00e2iseb",
+      "\u01c0Hoo\u01c2gaeb",
+      "H\u00f4asore\u01c1kh\u00e2b"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Ma",
+      "De",
+      "Wu",
+      "Do",
+      "Fr",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "\u01c3Khanni",
+      "\u01c3Khan\u01c0g\u00f4ab",
+      "\u01c0Khuu\u01c1kh\u00e2b",
+      "\u01c3H\u00f4a\u01c2khaib",
+      "\u01c3Khaits\u00e2b",
+      "Gama\u01c0aeb",
+      "\u01c2Khoesaob",
+      "Ao\u01c1khuum\u00fb\u01c1kh\u00e2b",
+      "Tara\u01c0khuum\u00fb\u01c1kh\u00e2b",
+      "\u01c2N\u00fb\u01c1n\u00e2iseb",
+      "\u01c0Hoo\u01c2gaeb",
+      "H\u00f4asore\u01c1kh\u00e2b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "naq-na",
+  "localeID": "naq_NA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq.js
new file mode 100644
index 0000000..e4297ea
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_naq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u01c1goagas",
+      "\u01c3uias"
+    ],
+    "DAY": [
+      "Sontaxtsees",
+      "Mantaxtsees",
+      "Denstaxtsees",
+      "Wunstaxtsees",
+      "Dondertaxtsees",
+      "Fraitaxtsees",
+      "Satertaxtsees"
+    ],
+    "ERANAMES": [
+      "Xristub ai\u01c3\u00e2",
+      "Xristub khao\u01c3g\u00e2"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u01c3Khanni",
+      "\u01c3Khan\u01c0g\u00f4ab",
+      "\u01c0Khuu\u01c1kh\u00e2b",
+      "\u01c3H\u00f4a\u01c2khaib",
+      "\u01c3Khaits\u00e2b",
+      "Gama\u01c0aeb",
+      "\u01c2Khoesaob",
+      "Ao\u01c1khuum\u00fb\u01c1kh\u00e2b",
+      "Tara\u01c0khuum\u00fb\u01c1kh\u00e2b",
+      "\u01c2N\u00fb\u01c1n\u00e2iseb",
+      "\u01c0Hoo\u01c2gaeb",
+      "H\u00f4asore\u01c1kh\u00e2b"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Ma",
+      "De",
+      "Wu",
+      "Do",
+      "Fr",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "\u01c3Khanni",
+      "\u01c3Khan\u01c0g\u00f4ab",
+      "\u01c0Khuu\u01c1kh\u00e2b",
+      "\u01c3H\u00f4a\u01c2khaib",
+      "\u01c3Khaits\u00e2b",
+      "Gama\u01c0aeb",
+      "\u01c2Khoesaob",
+      "Ao\u01c1khuum\u00fb\u01c1kh\u00e2b",
+      "Tara\u01c0khuum\u00fb\u01c1kh\u00e2b",
+      "\u01c2N\u00fb\u01c1n\u00e2iseb",
+      "\u01c0Hoo\u01c2gaeb",
+      "H\u00f4asore\u01c1kh\u00e2b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "naq",
+  "localeID": "naq",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-no.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-no.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-no.js
new file mode 100644
index 0000000..5c3c749
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-no.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd.MM.y HH.mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nb-no",
+  "localeID": "nb_NO",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-sj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-sj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-sj.js
new file mode 100644
index 0000000..76df065
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb-sj.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd.MM.y HH.mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nb-sj",
+  "localeID": "nb_SJ",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb.js
new file mode 100644
index 0000000..3edcbba
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nb.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "mai",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "april",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd.MM.y HH.mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nb",
+  "localeID": "nb",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd-zw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd-zw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd-zw.js
new file mode 100644
index 0000000..701e00b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd-zw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sonto",
+      "Mvulo",
+      "Sibili",
+      "Sithathu",
+      "Sine",
+      "Sihlanu",
+      "Mgqibelo"
+    ],
+    "ERANAMES": [
+      "UKristo angakabuyi",
+      "Ukristo ebuyile"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Zibandlela",
+      "Nhlolanja",
+      "Mbimbitho",
+      "Mabasa",
+      "Nkwenkwezi",
+      "Nhlangula",
+      "Ntulikazi",
+      "Ncwabakazi",
+      "Mpandula",
+      "Mfumfu",
+      "Lwezi",
+      "Mpalakazi"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mvu",
+      "Sib",
+      "Sit",
+      "Sin",
+      "Sih",
+      "Mgq"
+    ],
+    "SHORTMONTH": [
+      "Zib",
+      "Nhlo",
+      "Mbi",
+      "Mab",
+      "Nkw",
+      "Nhla",
+      "Ntu",
+      "Ncw",
+      "Mpan",
+      "Mfu",
+      "Lwe",
+      "Mpal"
+    ],
+    "STANDALONEMONTH": [
+      "Zibandlela",
+      "Nhlolanja",
+      "Mbimbitho",
+      "Mabasa",
+      "Nkwenkwezi",
+      "Nhlangula",
+      "Ntulikazi",
+      "Ncwabakazi",
+      "Mpandula",
+      "Mfumfu",
+      "Lwezi",
+      "Mpalakazi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nd-zw",
+  "localeID": "nd_ZW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd.js
new file mode 100644
index 0000000..5faebec
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nd.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sonto",
+      "Mvulo",
+      "Sibili",
+      "Sithathu",
+      "Sine",
+      "Sihlanu",
+      "Mgqibelo"
+    ],
+    "ERANAMES": [
+      "UKristo angakabuyi",
+      "Ukristo ebuyile"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Zibandlela",
+      "Nhlolanja",
+      "Mbimbitho",
+      "Mabasa",
+      "Nkwenkwezi",
+      "Nhlangula",
+      "Ntulikazi",
+      "Ncwabakazi",
+      "Mpandula",
+      "Mfumfu",
+      "Lwezi",
+      "Mpalakazi"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mvu",
+      "Sib",
+      "Sit",
+      "Sin",
+      "Sih",
+      "Mgq"
+    ],
+    "SHORTMONTH": [
+      "Zib",
+      "Nhlo",
+      "Mbi",
+      "Mab",
+      "Nkw",
+      "Nhla",
+      "Ntu",
+      "Ncw",
+      "Mpan",
+      "Mfu",
+      "Lwe",
+      "Mpal"
+    ],
+    "STANDALONEMONTH": [
+      "Zibandlela",
+      "Nhlolanja",
+      "Mbimbitho",
+      "Mabasa",
+      "Nkwenkwezi",
+      "Nhlangula",
+      "Ntulikazi",
+      "Ncwabakazi",
+      "Mpandula",
+      "Mfumfu",
+      "Lwezi",
+      "Mpalakazi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nd",
+  "localeID": "nd",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-in.js
new file mode 100644
index 0000000..a672c6d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928",
+      "\u0905\u092a\u0930\u093e\u0939\u094d\u0928"
+    ],
+    "DAY": [
+      "\u0906\u0907\u0924\u092c\u093e\u0930",
+      "\u0938\u094b\u092e\u092c\u093e\u0930",
+      "\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930",
+      "\u092c\u0941\u0927\u092c\u093e\u0930",
+      "\u092c\u093f\u0939\u093f\u092c\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930",
+      "\u0936\u0928\u093f\u092c\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928\u094d"
+    ],
+    "ERAS": [
+      "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928\u094d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0908",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0906\u0907\u0924",
+      "\u0938\u094b\u092e",
+      "\u092e\u0919\u094d\u0917\u0932",
+      "\u092c\u0941\u0927",
+      "\u092c\u093f\u0939\u0940",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ne-in",
+  "localeID": "ne_IN",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-np.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-np.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-np.js
new file mode 100644
index 0000000..2f241a7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne-np.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928",
+      "\u0905\u092a\u0930\u093e\u0939\u094d\u0928"
+    ],
+    "DAY": [
+      "\u0906\u0907\u0924\u092c\u093e\u0930",
+      "\u0938\u094b\u092e\u092c\u093e\u0930",
+      "\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930",
+      "\u092c\u0941\u0927\u092c\u093e\u0930",
+      "\u092c\u093f\u0939\u093f\u092c\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930",
+      "\u0936\u0928\u093f\u092c\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928\u094d"
+    ],
+    "ERAS": [
+      "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928\u094d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0908",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0906\u0907\u0924",
+      "\u0938\u094b\u092e",
+      "\u092e\u0919\u094d\u0917\u0932",
+      "\u092c\u0941\u0927",
+      "\u092c\u093f\u0939\u0940",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ne-np",
+  "localeID": "ne_NP",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne.js
new file mode 100644
index 0000000..59b8ac0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ne.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928",
+      "\u0905\u092a\u0930\u093e\u0939\u094d\u0928"
+    ],
+    "DAY": [
+      "\u0906\u0907\u0924\u092c\u093e\u0930",
+      "\u0938\u094b\u092e\u092c\u093e\u0930",
+      "\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930",
+      "\u092c\u0941\u0927\u092c\u093e\u0930",
+      "\u092c\u093f\u0939\u093f\u092c\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930",
+      "\u0936\u0928\u093f\u092c\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928\u094d"
+    ],
+    "ERAS": [
+      "\u0908\u0938\u093e \u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928\u094d"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0908",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0906\u0907\u0924",
+      "\u0938\u094b\u092e",
+      "\u092e\u0919\u094d\u0917\u0932",
+      "\u092c\u0941\u0927",
+      "\u092c\u093f\u0939\u0940",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0905\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930",
+      "\u0905\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ne",
+  "localeID": "ne",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-aw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-aw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-aw.js
new file mode 100644
index 0000000..711340e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-aw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Afl.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nl-aw",
+  "localeID": "nl_AW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-be.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-be.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-be.js
new file mode 100644
index 0000000..505cffe
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-be.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/MM/yy HH:mm",
+    "shortDate": "d/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "nl-be",
+  "localeID": "nl_BE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-bq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-bq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-bq.js
new file mode 100644
index 0000000..28eb5a8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-bq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nl-bq",
+  "localeID": "nl_BQ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-cw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-cw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-cw.js
new file mode 100644
index 0000000..77aca67
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-cw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "NAf.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nl-cw",
+  "localeID": "nl_CW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-nl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-nl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-nl.js
new file mode 100644
index 0000000..0eb3e7c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-nl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nl-nl",
+  "localeID": "nl_NL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sr.js
new file mode 100644
index 0000000..98984fe
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nl-sr",
+  "localeID": "nl_SR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sx.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sx.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sx.js
new file mode 100644
index 0000000..264e9a0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_nl-sx.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "zondag",
+      "maandag",
+      "dinsdag",
+      "woensdag",
+      "donderdag",
+      "vrijdag",
+      "zaterdag"
+    ],
+    "ERANAMES": [
+      "voor Christus",
+      "na Christus"
+    ],
+    "ERAS": [
+      "v.Chr.",
+      "n.Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "maart",
+      "april",
+      "mei",
+      "juni",
+      "juli",
+      "augustus",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "zo",
+      "ma",
+      "di",
+      "wo",
+      "do",
+      "vr",
+      "za"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mrt.",
+      "apr.",
+      "mei",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "NAf.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "nl-sx",
+  "localeID": "nl_SX",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[23/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es.js
new file mode 100644
index 0000000..07c4d2a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_es.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "domingo",
+      "lunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "jueves",
+      "viernes",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despu\u00e9s de Cristo"
+    ],
+    "ERAS": [
+      "a. C.",
+      "d. C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "enero",
+      "febrero",
+      "marzo",
+      "abril",
+      "mayo",
+      "junio",
+      "julio",
+      "agosto",
+      "septiembre",
+      "octubre",
+      "noviembre",
+      "diciembre"
+    ],
+    "SHORTDAY": [
+      "dom.",
+      "lun.",
+      "mar.",
+      "mi\u00e9.",
+      "jue.",
+      "vie.",
+      "s\u00e1b."
+    ],
+    "SHORTMONTH": [
+      "ene.",
+      "feb.",
+      "mar.",
+      "abr.",
+      "may.",
+      "jun.",
+      "jul.",
+      "ago.",
+      "sept.",
+      "oct.",
+      "nov.",
+      "dic."
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "es",
+  "localeID": "es",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et-ee.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et-ee.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et-ee.js
new file mode 100644
index 0000000..d891b9d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et-ee.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "p\u00fchap\u00e4ev",
+      "esmasp\u00e4ev",
+      "teisip\u00e4ev",
+      "kolmap\u00e4ev",
+      "neljap\u00e4ev",
+      "reede",
+      "laup\u00e4ev"
+    ],
+    "ERANAMES": [
+      "enne meie aega",
+      "meie aja j\u00e4rgi"
+    ],
+    "ERAS": [
+      "e.m.a.",
+      "m.a.j."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "jaanuar",
+      "veebruar",
+      "m\u00e4rts",
+      "aprill",
+      "mai",
+      "juuni",
+      "juuli",
+      "august",
+      "september",
+      "oktoober",
+      "november",
+      "detsember"
+    ],
+    "SHORTDAY": [
+      "P",
+      "E",
+      "T",
+      "K",
+      "N",
+      "R",
+      "L"
+    ],
+    "SHORTMONTH": [
+      "jaan",
+      "veebr",
+      "m\u00e4rts",
+      "apr",
+      "mai",
+      "juuni",
+      "juuli",
+      "aug",
+      "sept",
+      "okt",
+      "nov",
+      "dets"
+    ],
+    "STANDALONEMONTH": [
+      "jaanuar",
+      "veebruar",
+      "m\u00e4rts",
+      "aprill",
+      "mai",
+      "juuni",
+      "juuli",
+      "august",
+      "september",
+      "oktoober",
+      "november",
+      "detsember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y H:mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "H:mm.ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "et-ee",
+  "localeID": "et_EE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et.js
new file mode 100644
index 0000000..3c545d8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_et.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "p\u00fchap\u00e4ev",
+      "esmasp\u00e4ev",
+      "teisip\u00e4ev",
+      "kolmap\u00e4ev",
+      "neljap\u00e4ev",
+      "reede",
+      "laup\u00e4ev"
+    ],
+    "ERANAMES": [
+      "enne meie aega",
+      "meie aja j\u00e4rgi"
+    ],
+    "ERAS": [
+      "e.m.a.",
+      "m.a.j."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "jaanuar",
+      "veebruar",
+      "m\u00e4rts",
+      "aprill",
+      "mai",
+      "juuni",
+      "juuli",
+      "august",
+      "september",
+      "oktoober",
+      "november",
+      "detsember"
+    ],
+    "SHORTDAY": [
+      "P",
+      "E",
+      "T",
+      "K",
+      "N",
+      "R",
+      "L"
+    ],
+    "SHORTMONTH": [
+      "jaan",
+      "veebr",
+      "m\u00e4rts",
+      "apr",
+      "mai",
+      "juuni",
+      "juuli",
+      "aug",
+      "sept",
+      "okt",
+      "nov",
+      "dets"
+    ],
+    "STANDALONEMONTH": [
+      "jaanuar",
+      "veebruar",
+      "m\u00e4rts",
+      "aprill",
+      "mai",
+      "juuni",
+      "juuli",
+      "august",
+      "september",
+      "oktoober",
+      "november",
+      "detsember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y H:mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "H:mm.ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "et",
+  "localeID": "et",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu-es.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu-es.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu-es.js
new file mode 100644
index 0000000..1f27109
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu-es.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "igandea",
+      "astelehena",
+      "asteartea",
+      "asteazkena",
+      "osteguna",
+      "ostirala",
+      "larunbata"
+    ],
+    "ERANAMES": [
+      "K.a.",
+      "K.o."
+    ],
+    "ERAS": [
+      "K.a.",
+      "K.o."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "urtarrilak",
+      "otsailak",
+      "martxoak",
+      "apirilak",
+      "maiatzak",
+      "ekainak",
+      "uztailak",
+      "abuztuak",
+      "irailak",
+      "urriak",
+      "azaroak",
+      "abenduak"
+    ],
+    "SHORTDAY": [
+      "ig.",
+      "al.",
+      "ar.",
+      "az.",
+      "og.",
+      "or.",
+      "lr."
+    ],
+    "SHORTMONTH": [
+      "urt.",
+      "ots.",
+      "mar.",
+      "api.",
+      "mai.",
+      "eka.",
+      "uzt.",
+      "abu.",
+      "ira.",
+      "urr.",
+      "aza.",
+      "abe."
+    ],
+    "STANDALONEMONTH": [
+      "Urtarrila",
+      "Otsaila",
+      "Martxoa",
+      "Apirila",
+      "Maiatza",
+      "Ekaina",
+      "Uztaila",
+      "Abuztua",
+      "Iraila",
+      "Urria",
+      "Azaroa",
+      "Abendua"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y('e')'ko' MMMM d, EEEE",
+    "longDate": "y('e')'ko' MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y/MM/dd HH:mm",
+    "shortDate": "y/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "eu-es",
+  "localeID": "eu_ES",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu.js
new file mode 100644
index 0000000..c1ea375
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_eu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "igandea",
+      "astelehena",
+      "asteartea",
+      "asteazkena",
+      "osteguna",
+      "ostirala",
+      "larunbata"
+    ],
+    "ERANAMES": [
+      "K.a.",
+      "K.o."
+    ],
+    "ERAS": [
+      "K.a.",
+      "K.o."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "urtarrilak",
+      "otsailak",
+      "martxoak",
+      "apirilak",
+      "maiatzak",
+      "ekainak",
+      "uztailak",
+      "abuztuak",
+      "irailak",
+      "urriak",
+      "azaroak",
+      "abenduak"
+    ],
+    "SHORTDAY": [
+      "ig.",
+      "al.",
+      "ar.",
+      "az.",
+      "og.",
+      "or.",
+      "lr."
+    ],
+    "SHORTMONTH": [
+      "urt.",
+      "ots.",
+      "mar.",
+      "api.",
+      "mai.",
+      "eka.",
+      "uzt.",
+      "abu.",
+      "ira.",
+      "urr.",
+      "aza.",
+      "abe."
+    ],
+    "STANDALONEMONTH": [
+      "Urtarrila",
+      "Otsaila",
+      "Martxoa",
+      "Apirila",
+      "Maiatza",
+      "Ekaina",
+      "Uztaila",
+      "Abuztua",
+      "Iraila",
+      "Urria",
+      "Azaroa",
+      "Abendua"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y('e')'ko' MMMM d, EEEE",
+    "longDate": "y('e')'ko' MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y/MM/dd HH:mm",
+    "shortDate": "y/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "eu",
+  "localeID": "eu",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo-cm.js
new file mode 100644
index 0000000..70c6fef
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "k\u00edk\u00edr\u00edg",
+      "ng\u0259g\u00f3g\u0259le"
+    ],
+    "DAY": [
+      "s\u0254\u0301nd\u0254",
+      "m\u0254\u0301ndi",
+      "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301b\u025b\u030c",
+      "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301l\u025b\u0301",
+      "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301nyi",
+      "f\u00falad\u00e9",
+      "s\u00e9rad\u00e9"
+    ],
+    "ERANAMES": [
+      "os\u00fas\u00faa Y\u00e9sus kiri",
+      "\u00e1mvus Y\u00e9sus Kir\u00eds"
+    ],
+    "ERAS": [
+      "oyk",
+      "ayk"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ng\u0254n os\u00fa",
+      "ng\u0254n b\u025b\u030c",
+      "ng\u0254n l\u00e1la",
+      "ng\u0254n nyina",
+      "ng\u0254n t\u00e1na",
+      "ng\u0254n sam\u0259na",
+      "ng\u0254n zamgb\u00e1la",
+      "ng\u0254n mwom",
+      "ng\u0254n ebul\u00fa",
+      "ng\u0254n aw\u00f3m",
+      "ng\u0254n aw\u00f3m ai dzi\u00e1",
+      "ng\u0254n aw\u00f3m ai b\u025b\u030c"
+    ],
+    "SHORTDAY": [
+      "s\u0254\u0301n",
+      "m\u0254\u0301n",
+      "smb",
+      "sml",
+      "smn",
+      "f\u00fal",
+      "s\u00e9r"
+    ],
+    "SHORTMONTH": [
+      "ngo",
+      "ngb",
+      "ngl",
+      "ngn",
+      "ngt",
+      "ngs",
+      "ngz",
+      "ngm",
+      "nge",
+      "nga",
+      "ngad",
+      "ngab"
+    ],
+    "STANDALONEMONTH": [
+      "ng\u0254n os\u00fa",
+      "ng\u0254n b\u025b\u030c",
+      "ng\u0254n l\u00e1la",
+      "ng\u0254n nyina",
+      "ng\u0254n t\u00e1na",
+      "ng\u0254n sam\u0259na",
+      "ng\u0254n zamgb\u00e1la",
+      "ng\u0254n mwom",
+      "ng\u0254n ebul\u00fa",
+      "ng\u0254n aw\u00f3m",
+      "ng\u0254n aw\u00f3m ai dzi\u00e1",
+      "ng\u0254n aw\u00f3m ai b\u025b\u030c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ewo-cm",
+  "localeID": "ewo_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo.js
new file mode 100644
index 0000000..f036bd8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ewo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "k\u00edk\u00edr\u00edg",
+      "ng\u0259g\u00f3g\u0259le"
+    ],
+    "DAY": [
+      "s\u0254\u0301nd\u0254",
+      "m\u0254\u0301ndi",
+      "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301b\u025b\u030c",
+      "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301l\u025b\u0301",
+      "s\u0254\u0301nd\u0254 m\u0259l\u00fa m\u0259\u0301nyi",
+      "f\u00falad\u00e9",
+      "s\u00e9rad\u00e9"
+    ],
+    "ERANAMES": [
+      "os\u00fas\u00faa Y\u00e9sus kiri",
+      "\u00e1mvus Y\u00e9sus Kir\u00eds"
+    ],
+    "ERAS": [
+      "oyk",
+      "ayk"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ng\u0254n os\u00fa",
+      "ng\u0254n b\u025b\u030c",
+      "ng\u0254n l\u00e1la",
+      "ng\u0254n nyina",
+      "ng\u0254n t\u00e1na",
+      "ng\u0254n sam\u0259na",
+      "ng\u0254n zamgb\u00e1la",
+      "ng\u0254n mwom",
+      "ng\u0254n ebul\u00fa",
+      "ng\u0254n aw\u00f3m",
+      "ng\u0254n aw\u00f3m ai dzi\u00e1",
+      "ng\u0254n aw\u00f3m ai b\u025b\u030c"
+    ],
+    "SHORTDAY": [
+      "s\u0254\u0301n",
+      "m\u0254\u0301n",
+      "smb",
+      "sml",
+      "smn",
+      "f\u00fal",
+      "s\u00e9r"
+    ],
+    "SHORTMONTH": [
+      "ngo",
+      "ngb",
+      "ngl",
+      "ngn",
+      "ngt",
+      "ngs",
+      "ngz",
+      "ngm",
+      "nge",
+      "nga",
+      "ngad",
+      "ngab"
+    ],
+    "STANDALONEMONTH": [
+      "ng\u0254n os\u00fa",
+      "ng\u0254n b\u025b\u030c",
+      "ng\u0254n l\u00e1la",
+      "ng\u0254n nyina",
+      "ng\u0254n t\u00e1na",
+      "ng\u0254n sam\u0259na",
+      "ng\u0254n zamgb\u00e1la",
+      "ng\u0254n mwom",
+      "ng\u0254n ebul\u00fa",
+      "ng\u0254n aw\u00f3m",
+      "ng\u0254n aw\u00f3m ai dzi\u00e1",
+      "ng\u0254n aw\u00f3m ai b\u025b\u030c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ewo",
+  "localeID": "ewo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-af.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-af.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-af.js
new file mode 100644
index 0000000..a231b3c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-af.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631",
+      "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631"
+    ],
+    "DAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f",
+      "\u0645\u06cc\u0644\u0627\u062f\u06cc"
+    ],
+    "ERAS": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0628\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648",
+      "\u0641\u0648\u0631\u06cc\u0647\u0654",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0640\u06cc",
+      "\u0698\u0648\u0626\u0646",
+      "\u062c\u0648\u0644",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u0698\u0627\u0646\u0648\u06cc\u0647",
+      "\u0641\u0648\u0631\u06cc\u0647",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0647",
+      "\u0698\u0648\u0626\u0646",
+      "\u0698\u0648\u0626\u06cc\u0647",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0627\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      3,
+      4
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "y/M/d H:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Af.",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u200e\u00a4",
+        "negSuf": "",
+        "posPre": "\u200e\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fa-af",
+  "localeID": "fa_AF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-ir.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-ir.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-ir.js
new file mode 100644
index 0000000..01d13ad
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa-ir.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631",
+      "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631"
+    ],
+    "DAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f",
+      "\u0645\u06cc\u0644\u0627\u062f\u06cc"
+    ],
+    "ERAS": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+      "\u0641\u0648\u0631\u06cc\u0647\u0654",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0647\u0654",
+      "\u0698\u0648\u0626\u0646",
+      "\u0698\u0648\u0626\u06cc\u0647\u0654",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0627\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "SHORTMONTH": [
+      "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+      "\u0641\u0648\u0631\u06cc\u0647\u0654",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0647\u0654",
+      "\u0698\u0648\u0626\u0646",
+      "\u0698\u0648\u0626\u06cc\u0647\u0654",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0627\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u0698\u0627\u0646\u0648\u06cc\u0647",
+      "\u0641\u0648\u0631\u06cc\u0647",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0647",
+      "\u0698\u0648\u0626\u0646",
+      "\u0698\u0648\u0626\u06cc\u0647",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0627\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      4
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "y/M/d H:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u200e\u00a4",
+        "negSuf": "",
+        "posPre": "\u200e\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fa-ir",
+  "localeID": "fa_IR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa.js
new file mode 100644
index 0000000..bc27623
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fa.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631",
+      "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631"
+    ],
+    "DAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f",
+      "\u0645\u06cc\u0644\u0627\u062f\u06cc"
+    ],
+    "ERAS": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+      "\u0641\u0648\u0631\u06cc\u0647\u0654",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0647\u0654",
+      "\u0698\u0648\u0626\u0646",
+      "\u0698\u0648\u0626\u06cc\u0647\u0654",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0627\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "SHORTMONTH": [
+      "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+      "\u0641\u0648\u0631\u06cc\u0647\u0654",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0647\u0654",
+      "\u0698\u0648\u0626\u0646",
+      "\u0698\u0648\u0626\u06cc\u0647\u0654",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0627\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u0698\u0627\u0646\u0648\u06cc\u0647",
+      "\u0641\u0648\u0631\u06cc\u0647",
+      "\u0645\u0627\u0631\u0633",
+      "\u0622\u0648\u0631\u06cc\u0644",
+      "\u0645\u0647",
+      "\u0698\u0648\u0626\u0646",
+      "\u0698\u0648\u0626\u06cc\u0647",
+      "\u0627\u0648\u062a",
+      "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0628\u0631",
+      "\u0646\u0648\u0627\u0645\u0628\u0631",
+      "\u062f\u0633\u0627\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      4
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "y/M/d H:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u200e\u00a4",
+        "negSuf": "",
+        "posPre": "\u200e\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fa",
+  "localeID": "fa",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-cm.js
new file mode 100644
index 0000000..fc81b6e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "subaka",
+      "kikii\u0257e"
+    ],
+    "DAY": [
+      "dewo",
+      "aa\u0253nde",
+      "mawbaare",
+      "njeslaare",
+      "naasaande",
+      "mawnde",
+      "hoore-biir"
+    ],
+    "ERANAMES": [
+      "Hade Iisa",
+      "Caggal Iisa"
+    ],
+    "ERAS": [
+      "H-I",
+      "C-I"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "SHORTDAY": [
+      "dew",
+      "aa\u0253",
+      "maw",
+      "nje",
+      "naa",
+      "mwd",
+      "hbi"
+    ],
+    "SHORTMONTH": [
+      "sii",
+      "col",
+      "mbo",
+      "see",
+      "duu",
+      "kor",
+      "mor",
+      "juk",
+      "slt",
+      "yar",
+      "jol",
+      "bow"
+    ],
+    "STANDALONEMONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ff-cm",
+  "localeID": "ff_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-gn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-gn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-gn.js
new file mode 100644
index 0000000..f88c63e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-gn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "subaka",
+      "kikii\u0257e"
+    ],
+    "DAY": [
+      "dewo",
+      "aa\u0253nde",
+      "mawbaare",
+      "njeslaare",
+      "naasaande",
+      "mawnde",
+      "hoore-biir"
+    ],
+    "ERANAMES": [
+      "Hade Iisa",
+      "Caggal Iisa"
+    ],
+    "ERAS": [
+      "H-I",
+      "C-I"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "SHORTDAY": [
+      "dew",
+      "aa\u0253",
+      "maw",
+      "nje",
+      "naa",
+      "mwd",
+      "hbi"
+    ],
+    "SHORTMONTH": [
+      "sii",
+      "col",
+      "mbo",
+      "see",
+      "duu",
+      "kor",
+      "mor",
+      "juk",
+      "slt",
+      "yar",
+      "jol",
+      "bow"
+    ],
+    "STANDALONEMONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FG",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ff-gn",
+  "localeID": "ff_GN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-mr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-mr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-mr.js
new file mode 100644
index 0000000..841316e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-mr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "subaka",
+      "kikii\u0257e"
+    ],
+    "DAY": [
+      "dewo",
+      "aa\u0253nde",
+      "mawbaare",
+      "njeslaare",
+      "naasaande",
+      "mawnde",
+      "hoore-biir"
+    ],
+    "ERANAMES": [
+      "Hade Iisa",
+      "Caggal Iisa"
+    ],
+    "ERAS": [
+      "H-I",
+      "C-I"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "SHORTDAY": [
+      "dew",
+      "aa\u0253",
+      "maw",
+      "nje",
+      "naa",
+      "mwd",
+      "hbi"
+    ],
+    "SHORTMONTH": [
+      "sii",
+      "col",
+      "mbo",
+      "see",
+      "duu",
+      "kor",
+      "mor",
+      "juk",
+      "slt",
+      "yar",
+      "jol",
+      "bow"
+    ],
+    "STANDALONEMONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MRO",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ff-mr",
+  "localeID": "ff_MR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-sn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-sn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-sn.js
new file mode 100644
index 0000000..de6849e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff-sn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "subaka",
+      "kikii\u0257e"
+    ],
+    "DAY": [
+      "dewo",
+      "aa\u0253nde",
+      "mawbaare",
+      "njeslaare",
+      "naasaande",
+      "mawnde",
+      "hoore-biir"
+    ],
+    "ERANAMES": [
+      "Hade Iisa",
+      "Caggal Iisa"
+    ],
+    "ERAS": [
+      "H-I",
+      "C-I"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "SHORTDAY": [
+      "dew",
+      "aa\u0253",
+      "maw",
+      "nje",
+      "naa",
+      "mwd",
+      "hbi"
+    ],
+    "SHORTMONTH": [
+      "sii",
+      "col",
+      "mbo",
+      "see",
+      "duu",
+      "kor",
+      "mor",
+      "juk",
+      "slt",
+      "yar",
+      "jol",
+      "bow"
+    ],
+    "STANDALONEMONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ff-sn",
+  "localeID": "ff_SN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff.js
new file mode 100644
index 0000000..da4684f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ff.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "subaka",
+      "kikii\u0257e"
+    ],
+    "DAY": [
+      "dewo",
+      "aa\u0253nde",
+      "mawbaare",
+      "njeslaare",
+      "naasaande",
+      "mawnde",
+      "hoore-biir"
+    ],
+    "ERANAMES": [
+      "Hade Iisa",
+      "Caggal Iisa"
+    ],
+    "ERAS": [
+      "H-I",
+      "C-I"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "SHORTDAY": [
+      "dew",
+      "aa\u0253",
+      "maw",
+      "nje",
+      "naa",
+      "mwd",
+      "hbi"
+    ],
+    "SHORTMONTH": [
+      "sii",
+      "col",
+      "mbo",
+      "see",
+      "duu",
+      "kor",
+      "mor",
+      "juk",
+      "slt",
+      "yar",
+      "jol",
+      "bow"
+    ],
+    "STANDALONEMONTH": [
+      "siilo",
+      "colte",
+      "mbooy",
+      "see\u0257to",
+      "duujal",
+      "korse",
+      "morso",
+      "juko",
+      "siilto",
+      "yarkomaa",
+      "jolal",
+      "bowte"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ff",
+  "localeID": "ff",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi-fi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi-fi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi-fi.js
new file mode 100644
index 0000000..c3e6a46
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi-fi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ap.",
+      "ip."
+    ],
+    "DAY": [
+      "sunnuntaina",
+      "maanantaina",
+      "tiistaina",
+      "keskiviikkona",
+      "torstaina",
+      "perjantaina",
+      "lauantaina"
+    ],
+    "ERANAMES": [
+      "ennen Kristuksen syntym\u00e4\u00e4",
+      "j\u00e4lkeen Kristuksen syntym\u00e4n"
+    ],
+    "ERAS": [
+      "eKr.",
+      "jKr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "tammikuuta",
+      "helmikuuta",
+      "maaliskuuta",
+      "huhtikuuta",
+      "toukokuuta",
+      "kes\u00e4kuuta",
+      "hein\u00e4kuuta",
+      "elokuuta",
+      "syyskuuta",
+      "lokakuuta",
+      "marraskuuta",
+      "joulukuuta"
+    ],
+    "SHORTDAY": [
+      "su",
+      "ma",
+      "ti",
+      "ke",
+      "to",
+      "pe",
+      "la"
+    ],
+    "SHORTMONTH": [
+      "tammikuuta",
+      "helmikuuta",
+      "maaliskuuta",
+      "huhtikuuta",
+      "toukokuuta",
+      "kes\u00e4kuuta",
+      "hein\u00e4kuuta",
+      "elokuuta",
+      "syyskuuta",
+      "lokakuuta",
+      "marraskuuta",
+      "joulukuuta"
+    ],
+    "STANDALONEMONTH": [
+      "tammikuu",
+      "helmikuu",
+      "maaliskuu",
+      "huhtikuu",
+      "toukokuu",
+      "kes\u00e4kuu",
+      "hein\u00e4kuu",
+      "elokuu",
+      "syyskuu",
+      "lokakuu",
+      "marraskuu",
+      "joulukuu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "cccc d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d.M.y H.mm.ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "H.mm.ss",
+    "short": "d.M.y H.mm",
+    "shortDate": "d.M.y",
+    "shortTime": "H.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fi-fi",
+  "localeID": "fi_FI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi.js
new file mode 100644
index 0000000..f10f66e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ap.",
+      "ip."
+    ],
+    "DAY": [
+      "sunnuntaina",
+      "maanantaina",
+      "tiistaina",
+      "keskiviikkona",
+      "torstaina",
+      "perjantaina",
+      "lauantaina"
+    ],
+    "ERANAMES": [
+      "ennen Kristuksen syntym\u00e4\u00e4",
+      "j\u00e4lkeen Kristuksen syntym\u00e4n"
+    ],
+    "ERAS": [
+      "eKr.",
+      "jKr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "tammikuuta",
+      "helmikuuta",
+      "maaliskuuta",
+      "huhtikuuta",
+      "toukokuuta",
+      "kes\u00e4kuuta",
+      "hein\u00e4kuuta",
+      "elokuuta",
+      "syyskuuta",
+      "lokakuuta",
+      "marraskuuta",
+      "joulukuuta"
+    ],
+    "SHORTDAY": [
+      "su",
+      "ma",
+      "ti",
+      "ke",
+      "to",
+      "pe",
+      "la"
+    ],
+    "SHORTMONTH": [
+      "tammikuuta",
+      "helmikuuta",
+      "maaliskuuta",
+      "huhtikuuta",
+      "toukokuuta",
+      "kes\u00e4kuuta",
+      "hein\u00e4kuuta",
+      "elokuuta",
+      "syyskuuta",
+      "lokakuuta",
+      "marraskuuta",
+      "joulukuuta"
+    ],
+    "STANDALONEMONTH": [
+      "tammikuu",
+      "helmikuu",
+      "maaliskuu",
+      "huhtikuu",
+      "toukokuu",
+      "kes\u00e4kuu",
+      "hein\u00e4kuu",
+      "elokuu",
+      "syyskuu",
+      "lokakuu",
+      "marraskuu",
+      "joulukuu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "cccc d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d.M.y H.mm.ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "H.mm.ss",
+    "short": "d.M.y H.mm",
+    "shortDate": "d.M.y",
+    "shortTime": "H.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fi",
+  "localeID": "fi",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil-ph.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil-ph.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil-ph.js
new file mode 100644
index 0000000..2d222db
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil-ph.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Linggo",
+      "Lunes",
+      "Martes",
+      "Miyerkules",
+      "Huwebes",
+      "Biyernes",
+      "Sabado"
+    ],
+    "ERANAMES": [
+      "BC",
+      "AD"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Enero",
+      "Pebrero",
+      "Marso",
+      "Abril",
+      "Mayo",
+      "Hunyo",
+      "Hulyo",
+      "Agosto",
+      "Setyembre",
+      "Oktubre",
+      "Nobyembre",
+      "Disyembre"
+    ],
+    "SHORTDAY": [
+      "Lin",
+      "Lun",
+      "Mar",
+      "Miy",
+      "Huw",
+      "Biy",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Ene",
+      "Peb",
+      "Mar",
+      "Abr",
+      "May",
+      "Hun",
+      "Hul",
+      "Ago",
+      "Set",
+      "Okt",
+      "Nob",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Pebrero",
+      "Marso",
+      "Abril",
+      "Mayo",
+      "Hunyo",
+      "Hulyo",
+      "Agosto",
+      "Setyembre",
+      "Oktubre",
+      "Nobyembre",
+      "Disyembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b1",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fil-ph",
+  "localeID": "fil_PH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil.js
new file mode 100644
index 0000000..b7e3074
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fil.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Linggo",
+      "Lunes",
+      "Martes",
+      "Miyerkules",
+      "Huwebes",
+      "Biyernes",
+      "Sabado"
+    ],
+    "ERANAMES": [
+      "BC",
+      "AD"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Enero",
+      "Pebrero",
+      "Marso",
+      "Abril",
+      "Mayo",
+      "Hunyo",
+      "Hulyo",
+      "Agosto",
+      "Setyembre",
+      "Oktubre",
+      "Nobyembre",
+      "Disyembre"
+    ],
+    "SHORTDAY": [
+      "Lin",
+      "Lun",
+      "Mar",
+      "Miy",
+      "Huw",
+      "Biy",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Ene",
+      "Peb",
+      "Mar",
+      "Abr",
+      "May",
+      "Hun",
+      "Hul",
+      "Ago",
+      "Set",
+      "Okt",
+      "Nob",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Pebrero",
+      "Marso",
+      "Abril",
+      "Mayo",
+      "Hunyo",
+      "Hulyo",
+      "Agosto",
+      "Setyembre",
+      "Oktubre",
+      "Nobyembre",
+      "Disyembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b1",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fil",
+  "localeID": "fil",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo-fo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo-fo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo-fo.js
new file mode 100644
index 0000000..ef42c7a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo-fo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "um fyrrapartur",
+      "um seinnapartur"
+    ],
+    "DAY": [
+      "sunnudagur",
+      "m\u00e1nadagur",
+      "t\u00fdsdagur",
+      "mikudagur",
+      "h\u00f3sdagur",
+      "fr\u00edggjadagur",
+      "leygardagur"
+    ],
+    "ERANAMES": [
+      "fyrir Krist",
+      "eftir Krist"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "apr\u00edl",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "sun",
+      "m\u00e1n",
+      "t\u00fds",
+      "mik",
+      "h\u00f3s",
+      "fr\u00ed",
+      "ley"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "mai",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "des"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "apr\u00edl",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "d. MMM y",
+    "medium": "dd-MM-y HH:mm:ss",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fo-fo",
+  "localeID": "fo_FO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo.js
new file mode 100644
index 0000000..9d83231
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "um fyrrapartur",
+      "um seinnapartur"
+    ],
+    "DAY": [
+      "sunnudagur",
+      "m\u00e1nadagur",
+      "t\u00fdsdagur",
+      "mikudagur",
+      "h\u00f3sdagur",
+      "fr\u00edggjadagur",
+      "leygardagur"
+    ],
+    "ERANAMES": [
+      "fyrir Krist",
+      "eftir Krist"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "apr\u00edl",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "SHORTDAY": [
+      "sun",
+      "m\u00e1n",
+      "t\u00fds",
+      "mik",
+      "h\u00f3s",
+      "fr\u00ed",
+      "ley"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "mai",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "des"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mars",
+      "apr\u00edl",
+      "mai",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "desember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "d. MMM y",
+    "medium": "dd-MM-y HH:mm:ss",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-yy HH:mm",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "fo",
+  "localeID": "fo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-be.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-be.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-be.js
new file mode 100644
index 0000000..a8d99bb
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-be.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/MM/yy HH:mm",
+    "shortDate": "d/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-be",
+  "localeID": "fr_BE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bf.js
new file mode 100644
index 0000000..6e33697
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_fr-bf.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "ERANAMES": [
+      "avant J\u00e9sus-Christ",
+      "apr\u00e8s J\u00e9sus-Christ"
+    ],
+    "ERAS": [
+      "av. J.-C.",
+      "ap. J.-C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janvier",
+      "f\u00e9vrier",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "ao\u00fbt",
+      "septembre",
+      "octobre",
+      "novembre",
+      "d\u00e9cembre"
+    ],
+    "SHORTDAY": [
+      "dim.",
+      "lun.",
+      "mar.",
+      "mer.",
+      "jeu.",
+      "ven.",
+      "sam."
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "f\u00e9vr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juil.",
+      "ao\u00fbt",
+      "sept.",
+      "oct.",
+      "nov.",
+      "d\u00e9c."
+    ],
+    "STANDALONEMONTH": [
+      "Janvier",
+      "F\u00e9vrier",
+      "Mars",
+      "Avril",
+      "Mai",
+      "Juin",
+      "Juillet",
+      "Ao\u00fbt",
+      "Septembre",
+      "Octobre",
+      "Novembre",
+      "D\u00e9cembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "fr-bf",
+  "localeID": "fr_BF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || i == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[26/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mo.js
new file mode 100644
index 0000000..d24c8b3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MOP",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-mo",
+  "localeID": "en_MO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mp.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mp.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mp.js
new file mode 100644
index 0000000..ff8b6b4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mp.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-mp",
+  "localeID": "en_MP",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ms.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ms.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ms.js
new file mode 100644
index 0000000..7c44e8f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ms.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ms",
+  "localeID": "en_MS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mt.js
new file mode 100644
index 0000000..63c4255
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mt.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "dd MMM y h:mm:ss a",
+    "mediumDate": "dd MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-mt",
+  "localeID": "en_MT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mu.js
new file mode 100644
index 0000000..5ededb9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MURs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-mu",
+  "localeID": "en_MU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mw.js
new file mode 100644
index 0000000..ed68012
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-mw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MWK",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-mw",
+  "localeID": "en_MW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-my.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-my.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-my.js
new file mode 100644
index 0000000..ae1315b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-my.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RM",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-my",
+  "localeID": "en_MY",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-na.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-na.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-na.js
new file mode 100644
index 0000000..d7240f3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-na.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-na",
+  "localeID": "en_NA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nf.js
new file mode 100644
index 0000000..d238507
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nf.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-nf",
+  "localeID": "en_NF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ng.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ng.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ng.js
new file mode 100644
index 0000000..a6e01a5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ng.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ng",
+  "localeID": "en_NG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nr.js
new file mode 100644
index 0000000..43ccef7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-nr",
+  "localeID": "en_NR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nu.js
new file mode 100644
index 0000000..cf38b29
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-nu",
+  "localeID": "en_NU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nz.js
new file mode 100644
index 0000000..ed8882d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-nz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d/MM/y h:mm:ss a",
+    "mediumDate": "d/MM/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/MM/yy h:mm a",
+    "shortDate": "d/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-nz",
+  "localeID": "en_NZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pg.js
new file mode 100644
index 0000000..2d1f0f2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "PGK",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-pg",
+  "localeID": "en_PG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ph.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ph.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ph.js
new file mode 100644
index 0000000..d0de5aa
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-ph.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b1",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-ph",
+  "localeID": "en_PH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pk.js
new file mode 100644
index 0000000..8b29fb5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-pk",
+  "localeID": "en_PK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pn.js
new file mode 100644
index 0000000..ea48b8c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-pn",
+  "localeID": "en_PN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pr.js
new file mode 100644
index 0000000..0afbf67
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-pr",
+  "localeID": "en_PR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pw.js
new file mode 100644
index 0000000..b8ae591
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-pw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-pw",
+  "localeID": "en_PW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-rw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-rw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-rw.js
new file mode 100644
index 0000000..f61e44f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-rw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-rw",
+  "localeID": "en_RW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sb.js
new file mode 100644
index 0000000..86078c7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sb",
+  "localeID": "en_SB",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sc.js
new file mode 100644
index 0000000..2a568dc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sc.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SCR",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sc",
+  "localeID": "en_SC",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sd.js
new file mode 100644
index 0000000..661129d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sd.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SDG",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sd",
+  "localeID": "en_SD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sg.js
new file mode 100644
index 0000000..d27b9b2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_en-sg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-sg",
+  "localeID": "en_SG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[49/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js
new file mode 100644
index 0000000..2778fc5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js
@@ -0,0 +1,4121 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* jshint ignore:start */
+var noop        = angular.noop;
+var copy        = angular.copy;
+var extend      = angular.extend;
+var jqLite      = angular.element;
+var forEach     = angular.forEach;
+var isArray     = angular.isArray;
+var isString    = angular.isString;
+var isObject    = angular.isObject;
+var isUndefined = angular.isUndefined;
+var isDefined   = angular.isDefined;
+var isFunction  = angular.isFunction;
+var isElement   = angular.isElement;
+
+var ELEMENT_NODE = 1;
+var COMMENT_NODE = 8;
+
+var ADD_CLASS_SUFFIX = '-add';
+var REMOVE_CLASS_SUFFIX = '-remove';
+var EVENT_CLASS_PREFIX = 'ng-';
+var ACTIVE_CLASS_SUFFIX = '-active';
+var PREPARE_CLASS_SUFFIX = '-prepare';
+
+var NG_ANIMATE_CLASSNAME = 'ng-animate';
+var NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';
+
+// Detect proper transitionend/animationend event names.
+var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;
+
+// If unprefixed events are not supported but webkit-prefixed are, use the latter.
+// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.
+// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`
+// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.
+// Register both events in case `window.onanimationend` is not supported because of that,
+// do the same for `transitionend` as Safari is likely to exhibit similar behavior.
+// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
+// therefore there is no reason to test anymore for other vendor prefixes:
+// http://caniuse.com/#search=transition
+if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) {
+  CSS_PREFIX = '-webkit-';
+  TRANSITION_PROP = 'WebkitTransition';
+  TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
+} else {
+  TRANSITION_PROP = 'transition';
+  TRANSITIONEND_EVENT = 'transitionend';
+}
+
+if (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) {
+  CSS_PREFIX = '-webkit-';
+  ANIMATION_PROP = 'WebkitAnimation';
+  ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
+} else {
+  ANIMATION_PROP = 'animation';
+  ANIMATIONEND_EVENT = 'animationend';
+}
+
+var DURATION_KEY = 'Duration';
+var PROPERTY_KEY = 'Property';
+var DELAY_KEY = 'Delay';
+var TIMING_KEY = 'TimingFunction';
+var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';
+var ANIMATION_PLAYSTATE_KEY = 'PlayState';
+var SAFE_FAST_FORWARD_DURATION_VALUE = 9999;
+
+var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;
+var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;
+var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;
+var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;
+
+var isPromiseLike = function(p) {
+  return p && p.then ? true : false;
+};
+
+var ngMinErr = angular.$$minErr('ng');
+function assertArg(arg, name, reason) {
+  if (!arg) {
+    throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+  }
+  return arg;
+}
+
+function mergeClasses(a,b) {
+  if (!a && !b) return '';
+  if (!a) return b;
+  if (!b) return a;
+  if (isArray(a)) a = a.join(' ');
+  if (isArray(b)) b = b.join(' ');
+  return a + ' ' + b;
+}
+
+function packageStyles(options) {
+  var styles = {};
+  if (options && (options.to || options.from)) {
+    styles.to = options.to;
+    styles.from = options.from;
+  }
+  return styles;
+}
+
+function pendClasses(classes, fix, isPrefix) {
+  var className = '';
+  classes = isArray(classes)
+      ? classes
+      : classes && isString(classes) && classes.length
+          ? classes.split(/\s+/)
+          : [];
+  forEach(classes, function(klass, i) {
+    if (klass && klass.length > 0) {
+      className += (i > 0) ? ' ' : '';
+      className += isPrefix ? fix + klass
+                            : klass + fix;
+    }
+  });
+  return className;
+}
+
+function removeFromArray(arr, val) {
+  var index = arr.indexOf(val);
+  if (val >= 0) {
+    arr.splice(index, 1);
+  }
+}
+
+function stripCommentsFromElement(element) {
+  if (element instanceof jqLite) {
+    switch (element.length) {
+      case 0:
+        return [];
+        break;
+
+      case 1:
+        // there is no point of stripping anything if the element
+        // is the only element within the jqLite wrapper.
+        // (it's important that we retain the element instance.)
+        if (element[0].nodeType === ELEMENT_NODE) {
+          return element;
+        }
+        break;
+
+      default:
+        return jqLite(extractElementNode(element));
+        break;
+    }
+  }
+
+  if (element.nodeType === ELEMENT_NODE) {
+    return jqLite(element);
+  }
+}
+
+function extractElementNode(element) {
+  if (!element[0]) return element;
+  for (var i = 0; i < element.length; i++) {
+    var elm = element[i];
+    if (elm.nodeType == ELEMENT_NODE) {
+      return elm;
+    }
+  }
+}
+
+function $$addClass($$jqLite, element, className) {
+  forEach(element, function(elm) {
+    $$jqLite.addClass(elm, className);
+  });
+}
+
+function $$removeClass($$jqLite, element, className) {
+  forEach(element, function(elm) {
+    $$jqLite.removeClass(elm, className);
+  });
+}
+
+function applyAnimationClassesFactory($$jqLite) {
+  return function(element, options) {
+    if (options.addClass) {
+      $$addClass($$jqLite, element, options.addClass);
+      options.addClass = null;
+    }
+    if (options.removeClass) {
+      $$removeClass($$jqLite, element, options.removeClass);
+      options.removeClass = null;
+    }
+  }
+}
+
+function prepareAnimationOptions(options) {
+  options = options || {};
+  if (!options.$$prepared) {
+    var domOperation = options.domOperation || noop;
+    options.domOperation = function() {
+      options.$$domOperationFired = true;
+      domOperation();
+      domOperation = noop;
+    };
+    options.$$prepared = true;
+  }
+  return options;
+}
+
+function applyAnimationStyles(element, options) {
+  applyAnimationFromStyles(element, options);
+  applyAnimationToStyles(element, options);
+}
+
+function applyAnimationFromStyles(element, options) {
+  if (options.from) {
+    element.css(options.from);
+    options.from = null;
+  }
+}
+
+function applyAnimationToStyles(element, options) {
+  if (options.to) {
+    element.css(options.to);
+    options.to = null;
+  }
+}
+
+function mergeAnimationDetails(element, oldAnimation, newAnimation) {
+  var target = oldAnimation.options || {};
+  var newOptions = newAnimation.options || {};
+
+  var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');
+  var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');
+  var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);
+
+  if (newOptions.preparationClasses) {
+    target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);
+    delete newOptions.preparationClasses;
+  }
+
+  // noop is basically when there is no callback; otherwise something has been set
+  var realDomOperation = target.domOperation !== noop ? target.domOperation : null;
+
+  extend(target, newOptions);
+
+  // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this.
+  if (realDomOperation) {
+    target.domOperation = realDomOperation;
+  }
+
+  if (classes.addClass) {
+    target.addClass = classes.addClass;
+  } else {
+    target.addClass = null;
+  }
+
+  if (classes.removeClass) {
+    target.removeClass = classes.removeClass;
+  } else {
+    target.removeClass = null;
+  }
+
+  oldAnimation.addClass = target.addClass;
+  oldAnimation.removeClass = target.removeClass;
+
+  return target;
+}
+
+function resolveElementClasses(existing, toAdd, toRemove) {
+  var ADD_CLASS = 1;
+  var REMOVE_CLASS = -1;
+
+  var flags = {};
+  existing = splitClassesToLookup(existing);
+
+  toAdd = splitClassesToLookup(toAdd);
+  forEach(toAdd, function(value, key) {
+    flags[key] = ADD_CLASS;
+  });
+
+  toRemove = splitClassesToLookup(toRemove);
+  forEach(toRemove, function(value, key) {
+    flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;
+  });
+
+  var classes = {
+    addClass: '',
+    removeClass: ''
+  };
+
+  forEach(flags, function(val, klass) {
+    var prop, allow;
+    if (val === ADD_CLASS) {
+      prop = 'addClass';
+      allow = !existing[klass];
+    } else if (val === REMOVE_CLASS) {
+      prop = 'removeClass';
+      allow = existing[klass];
+    }
+    if (allow) {
+      if (classes[prop].length) {
+        classes[prop] += ' ';
+      }
+      classes[prop] += klass;
+    }
+  });
+
+  function splitClassesToLookup(classes) {
+    if (isString(classes)) {
+      classes = classes.split(' ');
+    }
+
+    var obj = {};
+    forEach(classes, function(klass) {
+      // sometimes the split leaves empty string values
+      // incase extra spaces were applied to the options
+      if (klass.length) {
+        obj[klass] = true;
+      }
+    });
+    return obj;
+  }
+
+  return classes;
+}
+
+function getDomNode(element) {
+  return (element instanceof angular.element) ? element[0] : element;
+}
+
+function applyGeneratedPreparationClasses(element, event, options) {
+  var classes = '';
+  if (event) {
+    classes = pendClasses(event, EVENT_CLASS_PREFIX, true);
+  }
+  if (options.addClass) {
+    classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));
+  }
+  if (options.removeClass) {
+    classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));
+  }
+  if (classes.length) {
+    options.preparationClasses = classes;
+    element.addClass(classes);
+  }
+}
+
+function clearGeneratedClasses(element, options) {
+  if (options.preparationClasses) {
+    element.removeClass(options.preparationClasses);
+    options.preparationClasses = null;
+  }
+  if (options.activeClasses) {
+    element.removeClass(options.activeClasses);
+    options.activeClasses = null;
+  }
+}
+
+function blockTransitions(node, duration) {
+  // we use a negative delay value since it performs blocking
+  // yet it doesn't kill any existing transitions running on the
+  // same element which makes this safe for class-based animations
+  var value = duration ? '-' + duration + 's' : '';
+  applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);
+  return [TRANSITION_DELAY_PROP, value];
+}
+
+function blockKeyframeAnimations(node, applyBlock) {
+  var value = applyBlock ? 'paused' : '';
+  var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;
+  applyInlineStyle(node, [key, value]);
+  return [key, value];
+}
+
+function applyInlineStyle(node, styleTuple) {
+  var prop = styleTuple[0];
+  var value = styleTuple[1];
+  node.style[prop] = value;
+}
+
+function concatWithSpace(a,b) {
+  if (!a) return b;
+  if (!b) return a;
+  return a + ' ' + b;
+}
+
+var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
+  var queue, cancelFn;
+
+  function scheduler(tasks) {
+    // we make a copy since RAFScheduler mutates the state
+    // of the passed in array variable and this would be difficult
+    // to track down on the outside code
+    queue = queue.concat(tasks);
+    nextTick();
+  }
+
+  queue = scheduler.queue = [];
+
+  /* waitUntilQuiet does two things:
+   * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through
+   * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.
+   *
+   * The motivation here is that animation code can request more time from the scheduler
+   * before the next wave runs. This allows for certain DOM properties such as classes to
+   * be resolved in time for the next animation to run.
+   */
+  scheduler.waitUntilQuiet = function(fn) {
+    if (cancelFn) cancelFn();
+
+    cancelFn = $$rAF(function() {
+      cancelFn = null;
+      fn();
+      nextTick();
+    });
+  };
+
+  return scheduler;
+
+  function nextTick() {
+    if (!queue.length) return;
+
+    var items = queue.shift();
+    for (var i = 0; i < items.length; i++) {
+      items[i]();
+    }
+
+    if (!cancelFn) {
+      $$rAF(function() {
+        if (!cancelFn) nextTick();
+      });
+    }
+  }
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngAnimateChildren
+ * @restrict AE
+ * @element ANY
+ *
+ * @description
+ *
+ * ngAnimateChildren allows you to specify that children of this element should animate even if any
+ * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move`
+ * (structural) animation, child elements that also have an active structural animation are not animated.
+ *
+ * Note that even if `ngAnimteChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).
+ *
+ *
+ * @param {string} ngAnimateChildren If the value is empty, `true` or `on`,
+ *     then child animations are allowed. If the value is `false`, child animations are not allowed.
+ *
+ * @example
+ * <example module="ngAnimateChildren" name="ngAnimateChildren" deps="angular-animate.js" animations="true">
+     <file name="index.html">
+       <div ng-controller="mainController as main">
+         <label>Show container? <input type="checkbox" ng-model="main.enterElement" /></label>
+         <label>Animate children? <input type="checkbox" ng-model="main.animateChildren" /></label>
+         <hr>
+         <div ng-animate-children="{{main.animateChildren}}">
+           <div ng-if="main.enterElement" class="container">
+             List of items:
+             <div ng-repeat="item in [0, 1, 2, 3]" class="item">Item {{item}}</div>
+           </div>
+         </div>
+       </div>
+     </file>
+     <file name="animations.css">
+
+      .container.ng-enter,
+      .container.ng-leave {
+        transition: all ease 1.5s;
+      }
+
+      .container.ng-enter,
+      .container.ng-leave-active {
+        opacity: 0;
+      }
+
+      .container.ng-leave,
+      .container.ng-enter-active {
+        opacity: 1;
+      }
+
+      .item {
+        background: firebrick;
+        color: #FFF;
+        margin-bottom: 10px;
+      }
+
+      .item.ng-enter,
+      .item.ng-leave {
+        transition: transform 1.5s ease;
+      }
+
+      .item.ng-enter {
+        transform: translateX(50px);
+      }
+
+      .item.ng-enter-active {
+        transform: translateX(0);
+      }
+    </file>
+    <file name="script.js">
+      angular.module('ngAnimateChildren', ['ngAnimate'])
+        .controller('mainController', function() {
+          this.animateChildren = false;
+          this.enterElement = false;
+        });
+    </file>
+  </example>
+ */
+var $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {
+  return {
+    link: function(scope, element, attrs) {
+      var val = attrs.ngAnimateChildren;
+      if (angular.isString(val) && val.length === 0) { //empty attribute
+        element.data(NG_ANIMATE_CHILDREN_DATA, true);
+      } else {
+        // Interpolate and set the value, so that it is available to
+        // animations that run right after compilation
+        setData($interpolate(val)(scope));
+        attrs.$observe('ngAnimateChildren', setData);
+      }
+
+      function setData(value) {
+        value = value === 'on' || value === 'true';
+        element.data(NG_ANIMATE_CHILDREN_DATA, value);
+      }
+    }
+  };
+}];
+
+var ANIMATE_TIMER_KEY = '$$animateCss';
+
+/**
+ * @ngdoc service
+ * @name $animateCss
+ * @kind object
+ *
+ * @description
+ * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes
+ * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT
+ * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or
+ * directives to create more complex animations that can be purely driven using CSS code.
+ *
+ * Note that only browsers that support CSS transitions and/or keyframe animations are capable of
+ * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).
+ *
+ * ## Usage
+ * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that
+ * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,
+ * any automatic control over cancelling animations and/or preventing animations from being run on
+ * child elements will not be handled by Angular. For this to work as expected, please use `$animate` to
+ * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger
+ * the CSS animation.
+ *
+ * The example below shows how we can create a folding animation on an element using `ng-if`:
+ *
+ * ```html
+ * <!-- notice the `fold-animation` CSS class -->
+ * <div ng-if="onOff" class="fold-animation">
+ *   This element will go BOOM
+ * </div>
+ * <button ng-click="onOff=true">Fold In</button>
+ * ```
+ *
+ * Now we create the **JavaScript animation** that will trigger the CSS transition:
+ *
+ * ```js
+ * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {
+ *   return {
+ *     enter: function(element, doneFn) {
+ *       var height = element[0].offsetHeight;
+ *       return $animateCss(element, {
+ *         from: { height:'0px' },
+ *         to: { height:height + 'px' },
+ *         duration: 1 // one second
+ *       });
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * ## More Advanced Uses
+ *
+ * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks
+ * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.
+ *
+ * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,
+ * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with
+ * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order
+ * to provide a working animation that will run in CSS.
+ *
+ * The example below showcases a more advanced version of the `.fold-animation` from the example above:
+ *
+ * ```js
+ * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {
+ *   return {
+ *     enter: function(element, doneFn) {
+ *       var height = element[0].offsetHeight;
+ *       return $animateCss(element, {
+ *         addClass: 'red large-text pulse-twice',
+ *         easing: 'ease-out',
+ *         from: { height:'0px' },
+ *         to: { height:height + 'px' },
+ *         duration: 1 // one second
+ *       });
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * Since we're adding/removing CSS classes then the CSS transition will also pick those up:
+ *
+ * ```css
+ * /&#42; since a hardcoded duration value of 1 was provided in the JavaScript animation code,
+ * the CSS classes below will be transitioned despite them being defined as regular CSS classes &#42;/
+ * .red { background:red; }
+ * .large-text { font-size:20px; }
+ *
+ * /&#42; we can also use a keyframe animation and $animateCss will make it work alongside the transition &#42;/
+ * .pulse-twice {
+ *   animation: 0.5s pulse linear 2;
+ *   -webkit-animation: 0.5s pulse linear 2;
+ * }
+ *
+ * @keyframes pulse {
+ *   from { transform: scale(0.5); }
+ *   to { transform: scale(1.5); }
+ * }
+ *
+ * @-webkit-keyframes pulse {
+ *   from { -webkit-transform: scale(0.5); }
+ *   to { -webkit-transform: scale(1.5); }
+ * }
+ * ```
+ *
+ * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.
+ *
+ * ## How the Options are handled
+ *
+ * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation
+ * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline
+ * styles using the `from` and `to` properties.
+ *
+ * ```js
+ * var animator = $animateCss(element, {
+ *   from: { background:'red' },
+ *   to: { background:'blue' }
+ * });
+ * animator.start();
+ * ```
+ *
+ * ```css
+ * .rotating-animation {
+ *   animation:0.5s rotate linear;
+ *   -webkit-animation:0.5s rotate linear;
+ * }
+ *
+ * @keyframes rotate {
+ *   from { transform: rotate(0deg); }
+ *   to { transform: rotate(360deg); }
+ * }
+ *
+ * @-webkit-keyframes rotate {
+ *   from { -webkit-transform: rotate(0deg); }
+ *   to { -webkit-transform: rotate(360deg); }
+ * }
+ * ```
+ *
+ * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is
+ * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition
+ * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition
+ * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied
+ * and spread across the transition and keyframe animation.
+ *
+ * ## What is returned
+ *
+ * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually
+ * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are
+ * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:
+ *
+ * ```js
+ * var animator = $animateCss(element, { ... });
+ * ```
+ *
+ * Now what do the contents of our `animator` variable look like:
+ *
+ * ```js
+ * {
+ *   // starts the animation
+ *   start: Function,
+ *
+ *   // ends (aborts) the animation
+ *   end: Function
+ * }
+ * ```
+ *
+ * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.
+ * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and styles may have been
+ * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties
+ * and that changing them will not reconfigure the parameters of the animation.
+ *
+ * ### runner.done() vs runner.then()
+ * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the
+ * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.
+ * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`
+ * unless you really need a digest to kick off afterwards.
+ *
+ * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss
+ * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code).
+ * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works.
+ *
+ * @param {DOMElement} element the element that will be animated
+ * @param {object} options the animation-related options that will be applied during the animation
+ *
+ * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied
+ * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)
+ * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and
+ * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted.
+ * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).
+ * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).
+ * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).
+ * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.
+ * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.
+ * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.
+ * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.
+ * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0`
+ * is provided then the animation will be skipped entirely.
+ * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is
+ * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value
+ * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same
+ * CSS delay value.
+ * * `stagger` - A numeric time value representing the delay between successively animated elements
+ * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})
+ * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a
+ *   `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
+ * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occurring on the classes being added and removed.)
+ * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once
+ *    the animation is closed. This is useful for when the styles are used purely for the sake of
+ *    the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation).
+ *    By default this value is set to `false`.
+ *
+ * @return {object} an object with start and end methods and details about the animation.
+ *
+ * * `start` - The method to start the animation. This will return a `Promise` when called.
+ * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.
+ */
+var ONE_SECOND = 1000;
+var BASE_TEN = 10;
+
+var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
+var CLOSING_TIME_BUFFER = 1.5;
+
+var DETECT_CSS_PROPERTIES = {
+  transitionDuration:      TRANSITION_DURATION_PROP,
+  transitionDelay:         TRANSITION_DELAY_PROP,
+  transitionProperty:      TRANSITION_PROP + PROPERTY_KEY,
+  animationDuration:       ANIMATION_DURATION_PROP,
+  animationDelay:          ANIMATION_DELAY_PROP,
+  animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY
+};
+
+var DETECT_STAGGER_CSS_PROPERTIES = {
+  transitionDuration:      TRANSITION_DURATION_PROP,
+  transitionDelay:         TRANSITION_DELAY_PROP,
+  animationDuration:       ANIMATION_DURATION_PROP,
+  animationDelay:          ANIMATION_DELAY_PROP
+};
+
+function getCssKeyframeDurationStyle(duration) {
+  return [ANIMATION_DURATION_PROP, duration + 's'];
+}
+
+function getCssDelayStyle(delay, isKeyframeAnimation) {
+  var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;
+  return [prop, delay + 's'];
+}
+
+function computeCssStyles($window, element, properties) {
+  var styles = Object.create(null);
+  var detectedStyles = $window.getComputedStyle(element) || {};
+  forEach(properties, function(formalStyleName, actualStyleName) {
+    var val = detectedStyles[formalStyleName];
+    if (val) {
+      var c = val.charAt(0);
+
+      // only numerical-based values have a negative sign or digit as the first value
+      if (c === '-' || c === '+' || c >= 0) {
+        val = parseMaxTime(val);
+      }
+
+      // by setting this to null in the event that the delay is not set or is set directly as 0
+      // then we can still allow for negative values to be used later on and not mistake this
+      // value for being greater than any other negative value.
+      if (val === 0) {
+        val = null;
+      }
+      styles[actualStyleName] = val;
+    }
+  });
+
+  return styles;
+}
+
+function parseMaxTime(str) {
+  var maxValue = 0;
+  var values = str.split(/\s*,\s*/);
+  forEach(values, function(value) {
+    // it's always safe to consider only second values and omit `ms` values since
+    // getComputedStyle will always handle the conversion for us
+    if (value.charAt(value.length - 1) == 's') {
+      value = value.substring(0, value.length - 1);
+    }
+    value = parseFloat(value) || 0;
+    maxValue = maxValue ? Math.max(value, maxValue) : value;
+  });
+  return maxValue;
+}
+
+function truthyTimingValue(val) {
+  return val === 0 || val != null;
+}
+
+function getCssTransitionDurationStyle(duration, applyOnlyDuration) {
+  var style = TRANSITION_PROP;
+  var value = duration + 's';
+  if (applyOnlyDuration) {
+    style += DURATION_KEY;
+  } else {
+    value += ' linear all';
+  }
+  return [style, value];
+}
+
+function createLocalCacheLookup() {
+  var cache = Object.create(null);
+  return {
+    flush: function() {
+      cache = Object.create(null);
+    },
+
+    count: function(key) {
+      var entry = cache[key];
+      return entry ? entry.total : 0;
+    },
+
+    get: function(key) {
+      var entry = cache[key];
+      return entry && entry.value;
+    },
+
+    put: function(key, value) {
+      if (!cache[key]) {
+        cache[key] = { total: 1, value: value };
+      } else {
+        cache[key].total++;
+      }
+    }
+  };
+}
+
+// we do not reassign an already present style value since
+// if we detect the style property value again we may be
+// detecting styles that were added via the `from` styles.
+// We make use of `isDefined` here since an empty string
+// or null value (which is what getPropertyValue will return
+// for a non-existing style) will still be marked as a valid
+// value for the style (a falsy value implies that the style
+// is to be removed at the end of the animation). If we had a simple
+// "OR" statement then it would not be enough to catch that.
+function registerRestorableStyles(backup, node, properties) {
+  forEach(properties, function(prop) {
+    backup[prop] = isDefined(backup[prop])
+        ? backup[prop]
+        : node.style.getPropertyValue(prop);
+  });
+}
+
+var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
+  var gcsLookup = createLocalCacheLookup();
+  var gcsStaggerLookup = createLocalCacheLookup();
+
+  this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',
+               '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue',
+       function($window,   $$jqLite,   $$AnimateRunner,   $timeout,
+                $$forceReflow,   $sniffer,   $$rAFScheduler, $$animateQueue) {
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+    var parentCounter = 0;
+    function gcsHashFn(node, extraClasses) {
+      var KEY = "$$ngAnimateParentKey";
+      var parentNode = node.parentNode;
+      var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);
+      return parentID + '-' + node.getAttribute('class') + '-' + extraClasses;
+    }
+
+    function computeCachedCssStyles(node, className, cacheKey, properties) {
+      var timings = gcsLookup.get(cacheKey);
+
+      if (!timings) {
+        timings = computeCssStyles($window, node, properties);
+        if (timings.animationIterationCount === 'infinite') {
+          timings.animationIterationCount = 1;
+        }
+      }
+
+      // we keep putting this in multiple times even though the value and the cacheKey are the same
+      // because we're keeping an internal tally of how many duplicate animations are detected.
+      gcsLookup.put(cacheKey, timings);
+      return timings;
+    }
+
+    function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {
+      var stagger;
+
+      // if we have one or more existing matches of matching elements
+      // containing the same parent + CSS styles (which is how cacheKey works)
+      // then staggering is possible
+      if (gcsLookup.count(cacheKey) > 0) {
+        stagger = gcsStaggerLookup.get(cacheKey);
+
+        if (!stagger) {
+          var staggerClassName = pendClasses(className, '-stagger');
+
+          $$jqLite.addClass(node, staggerClassName);
+
+          stagger = computeCssStyles($window, node, properties);
+
+          // force the conversion of a null value to zero incase not set
+          stagger.animationDuration = Math.max(stagger.animationDuration, 0);
+          stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);
+
+          $$jqLite.removeClass(node, staggerClassName);
+
+          gcsStaggerLookup.put(cacheKey, stagger);
+        }
+      }
+
+      return stagger || {};
+    }
+
+    var cancelLastRAFRequest;
+    var rafWaitQueue = [];
+    function waitUntilQuiet(callback) {
+      rafWaitQueue.push(callback);
+      $$rAFScheduler.waitUntilQuiet(function() {
+        gcsLookup.flush();
+        gcsStaggerLookup.flush();
+
+        // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.
+        // PLEASE EXAMINE THE `$$forceReflow` service to understand why.
+        var pageWidth = $$forceReflow();
+
+        // we use a for loop to ensure that if the queue is changed
+        // during this looping then it will consider new requests
+        for (var i = 0; i < rafWaitQueue.length; i++) {
+          rafWaitQueue[i](pageWidth);
+        }
+        rafWaitQueue.length = 0;
+      });
+    }
+
+    function computeTimings(node, className, cacheKey) {
+      var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);
+      var aD = timings.animationDelay;
+      var tD = timings.transitionDelay;
+      timings.maxDelay = aD && tD
+          ? Math.max(aD, tD)
+          : (aD || tD);
+      timings.maxDuration = Math.max(
+          timings.animationDuration * timings.animationIterationCount,
+          timings.transitionDuration);
+
+      return timings;
+    }
+
+    return function init(element, initialOptions) {
+      // all of the animation functions should create
+      // a copy of the options data, however, if a
+      // parent service has already created a copy then
+      // we should stick to using that
+      var options = initialOptions || {};
+      if (!options.$$prepared) {
+        options = prepareAnimationOptions(copy(options));
+      }
+
+      var restoreStyles = {};
+      var node = getDomNode(element);
+      if (!node
+          || !node.parentNode
+          || !$$animateQueue.enabled()) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      var temporaryStyles = [];
+      var classes = element.attr('class');
+      var styles = packageStyles(options);
+      var animationClosed;
+      var animationPaused;
+      var animationCompleted;
+      var runner;
+      var runnerHost;
+      var maxDelay;
+      var maxDelayTime;
+      var maxDuration;
+      var maxDurationTime;
+      var startTime;
+      var events = [];
+
+      if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      var method = options.event && isArray(options.event)
+            ? options.event.join(' ')
+            : options.event;
+
+      var isStructural = method && options.structural;
+      var structuralClassName = '';
+      var addRemoveClassName = '';
+
+      if (isStructural) {
+        structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);
+      } else if (method) {
+        structuralClassName = method;
+      }
+
+      if (options.addClass) {
+        addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);
+      }
+
+      if (options.removeClass) {
+        if (addRemoveClassName.length) {
+          addRemoveClassName += ' ';
+        }
+        addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);
+      }
+
+      // there may be a situation where a structural animation is combined together
+      // with CSS classes that need to resolve before the animation is computed.
+      // However this means that there is no explicit CSS code to block the animation
+      // from happening (by setting 0s none in the class name). If this is the case
+      // we need to apply the classes before the first rAF so we know to continue if
+      // there actually is a detected transition or keyframe animation
+      if (options.applyClassesEarly && addRemoveClassName.length) {
+        applyAnimationClasses(element, options);
+      }
+
+      var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();
+      var fullClassName = classes + ' ' + preparationClasses;
+      var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);
+      var hasToStyles = styles.to && Object.keys(styles.to).length > 0;
+      var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;
+
+      // there is no way we can trigger an animation if no styles and
+      // no classes are being applied which would then trigger a transition,
+      // unless there a is raw keyframe value that is applied to the element.
+      if (!containsKeyframeAnimation
+           && !hasToStyles
+           && !preparationClasses) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      var cacheKey, stagger;
+      if (options.stagger > 0) {
+        var staggerVal = parseFloat(options.stagger);
+        stagger = {
+          transitionDelay: staggerVal,
+          animationDelay: staggerVal,
+          transitionDuration: 0,
+          animationDuration: 0
+        };
+      } else {
+        cacheKey = gcsHashFn(node, fullClassName);
+        stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);
+      }
+
+      if (!options.$$skipPreparationClasses) {
+        $$jqLite.addClass(element, preparationClasses);
+      }
+
+      var applyOnlyDuration;
+
+      if (options.transitionStyle) {
+        var transitionStyle = [TRANSITION_PROP, options.transitionStyle];
+        applyInlineStyle(node, transitionStyle);
+        temporaryStyles.push(transitionStyle);
+      }
+
+      if (options.duration >= 0) {
+        applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;
+        var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);
+
+        // we set the duration so that it will be picked up by getComputedStyle later
+        applyInlineStyle(node, durationStyle);
+        temporaryStyles.push(durationStyle);
+      }
+
+      if (options.keyframeStyle) {
+        var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];
+        applyInlineStyle(node, keyframeStyle);
+        temporaryStyles.push(keyframeStyle);
+      }
+
+      var itemIndex = stagger
+          ? options.staggerIndex >= 0
+              ? options.staggerIndex
+              : gcsLookup.count(cacheKey)
+          : 0;
+
+      var isFirst = itemIndex === 0;
+
+      // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY
+      // without causing any combination of transitions to kick in. By adding a negative delay value
+      // it forces the setup class' transition to end immediately. We later then remove the negative
+      // transition delay to allow for the transition to naturally do it's thing. The beauty here is
+      // that if there is no transition defined then nothing will happen and this will also allow
+      // other transitions to be stacked on top of each other without any chopping them out.
+      if (isFirst && !options.skipBlocking) {
+        blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);
+      }
+
+      var timings = computeTimings(node, fullClassName, cacheKey);
+      var relativeDelay = timings.maxDelay;
+      maxDelay = Math.max(relativeDelay, 0);
+      maxDuration = timings.maxDuration;
+
+      var flags = {};
+      flags.hasTransitions          = timings.transitionDuration > 0;
+      flags.hasAnimations           = timings.animationDuration > 0;
+      flags.hasTransitionAll        = flags.hasTransitions && timings.transitionProperty == 'all';
+      flags.applyTransitionDuration = hasToStyles && (
+                                        (flags.hasTransitions && !flags.hasTransitionAll)
+                                         || (flags.hasAnimations && !flags.hasTransitions));
+      flags.applyAnimationDuration  = options.duration && flags.hasAnimations;
+      flags.applyTransitionDelay    = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);
+      flags.applyAnimationDelay     = truthyTimingValue(options.delay) && flags.hasAnimations;
+      flags.recalculateTimingStyles = addRemoveClassName.length > 0;
+
+      if (flags.applyTransitionDuration || flags.applyAnimationDuration) {
+        maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;
+
+        if (flags.applyTransitionDuration) {
+          flags.hasTransitions = true;
+          timings.transitionDuration = maxDuration;
+          applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;
+          temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));
+        }
+
+        if (flags.applyAnimationDuration) {
+          flags.hasAnimations = true;
+          timings.animationDuration = maxDuration;
+          temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));
+        }
+      }
+
+      if (maxDuration === 0 && !flags.recalculateTimingStyles) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      if (options.delay != null) {
+        var delayStyle;
+        if (typeof options.delay !== "boolean") {
+          delayStyle = parseFloat(options.delay);
+          // number in options.delay means we have to recalculate the delay for the closing timeout
+          maxDelay = Math.max(delayStyle, 0);
+        }
+
+        if (flags.applyTransitionDelay) {
+          temporaryStyles.push(getCssDelayStyle(delayStyle));
+        }
+
+        if (flags.applyAnimationDelay) {
+          temporaryStyles.push(getCssDelayStyle(delayStyle, true));
+        }
+      }
+
+      // we need to recalculate the delay value since we used a pre-emptive negative
+      // delay value and the delay value is required for the final event checking. This
+      // property will ensure that this will happen after the RAF phase has passed.
+      if (options.duration == null && timings.transitionDuration > 0) {
+        flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;
+      }
+
+      maxDelayTime = maxDelay * ONE_SECOND;
+      maxDurationTime = maxDuration * ONE_SECOND;
+      if (!options.skipBlocking) {
+        flags.blockTransition = timings.transitionDuration > 0;
+        flags.blockKeyframeAnimation = timings.animationDuration > 0 &&
+                                       stagger.animationDelay > 0 &&
+                                       stagger.animationDuration === 0;
+      }
+
+      if (options.from) {
+        if (options.cleanupStyles) {
+          registerRestorableStyles(restoreStyles, node, Object.keys(options.from));
+        }
+        applyAnimationFromStyles(element, options);
+      }
+
+      if (flags.blockTransition || flags.blockKeyframeAnimation) {
+        applyBlocking(maxDuration);
+      } else if (!options.skipBlocking) {
+        blockTransitions(node, false);
+      }
+
+      // TODO(matsko): for 1.5 change this code to have an animator object for better debugging
+      return {
+        $$willAnimate: true,
+        end: endFn,
+        start: function() {
+          if (animationClosed) return;
+
+          runnerHost = {
+            end: endFn,
+            cancel: cancelFn,
+            resume: null, //this will be set during the start() phase
+            pause: null
+          };
+
+          runner = new $$AnimateRunner(runnerHost);
+
+          waitUntilQuiet(start);
+
+          // we don't have access to pause/resume the animation
+          // since it hasn't run yet. AnimateRunner will therefore
+          // set noop functions for resume and pause and they will
+          // later be overridden once the animation is triggered
+          return runner;
+        }
+      };
+
+      function endFn() {
+        close();
+      }
+
+      function cancelFn() {
+        close(true);
+      }
+
+      function close(rejected) { // jshint ignore:line
+        // if the promise has been called already then we shouldn't close
+        // the animation again
+        if (animationClosed || (animationCompleted && animationPaused)) return;
+        animationClosed = true;
+        animationPaused = false;
+
+        if (!options.$$skipPreparationClasses) {
+          $$jqLite.removeClass(element, preparationClasses);
+        }
+        $$jqLite.removeClass(element, activeClasses);
+
+        blockKeyframeAnimations(node, false);
+        blockTransitions(node, false);
+
+        forEach(temporaryStyles, function(entry) {
+          // There is only one way to remove inline style properties entirely from elements.
+          // By using `removeProperty` this works, but we need to convert camel-cased CSS
+          // styles down to hyphenated values.
+          node.style[entry[0]] = '';
+        });
+
+        applyAnimationClasses(element, options);
+        applyAnimationStyles(element, options);
+
+        if (Object.keys(restoreStyles).length) {
+          forEach(restoreStyles, function(value, prop) {
+            value ? node.style.setProperty(prop, value)
+                  : node.style.removeProperty(prop);
+          });
+        }
+
+        // the reason why we have this option is to allow a synchronous closing callback
+        // that is fired as SOON as the animation ends (when the CSS is removed) or if
+        // the animation never takes off at all. A good example is a leave animation since
+        // the element must be removed just after the animation is over or else the element
+        // will appear on screen for one animation frame causing an overbearing flicker.
+        if (options.onDone) {
+          options.onDone();
+        }
+
+        if (events && events.length) {
+          // Remove the transitionend / animationend listener(s)
+          element.off(events.join(' '), onAnimationProgress);
+        }
+
+        //Cancel the fallback closing timeout and remove the timer data
+        var animationTimerData = element.data(ANIMATE_TIMER_KEY);
+        if (animationTimerData) {
+          $timeout.cancel(animationTimerData[0].timer);
+          element.removeData(ANIMATE_TIMER_KEY);
+        }
+
+        // if the preparation function fails then the promise is not setup
+        if (runner) {
+          runner.complete(!rejected);
+        }
+      }
+
+      function applyBlocking(duration) {
+        if (flags.blockTransition) {
+          blockTransitions(node, duration);
+        }
+
+        if (flags.blockKeyframeAnimation) {
+          blockKeyframeAnimations(node, !!duration);
+        }
+      }
+
+      function closeAndReturnNoopAnimator() {
+        runner = new $$AnimateRunner({
+          end: endFn,
+          cancel: cancelFn
+        });
+
+        // should flush the cache animation
+        waitUntilQuiet(noop);
+        close();
+
+        return {
+          $$willAnimate: false,
+          start: function() {
+            return runner;
+          },
+          end: endFn
+        };
+      }
+
+      function onAnimationProgress(event) {
+        event.stopPropagation();
+        var ev = event.originalEvent || event;
+
+        // we now always use `Date.now()` due to the recent changes with
+        // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info)
+        var timeStamp = ev.$manualTimeStamp || Date.now();
+
+        /* Firefox (or possibly just Gecko) likes to not round values up
+         * when a ms measurement is used for the animation */
+        var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));
+
+        /* $manualTimeStamp is a mocked timeStamp value which is set
+         * within browserTrigger(). This is only here so that tests can
+         * mock animations properly. Real events fallback to event.timeStamp,
+         * or, if they don't, then a timeStamp is automatically created for them.
+         * We're checking to see if the timeStamp surpasses the expected delay,
+         * but we're using elapsedTime instead of the timeStamp on the 2nd
+         * pre-condition since animationPauseds sometimes close off early */
+        if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {
+          // we set this flag to ensure that if the transition is paused then, when resumed,
+          // the animation will automatically close itself since transitions cannot be paused.
+          animationCompleted = true;
+          close();
+        }
+      }
+
+      function start() {
+        if (animationClosed) return;
+        if (!node.parentNode) {
+          close();
+          return;
+        }
+
+        // even though we only pause keyframe animations here the pause flag
+        // will still happen when transitions are used. Only the transition will
+        // not be paused since that is not possible. If the animation ends when
+        // paused then it will not complete until unpaused or cancelled.
+        var playPause = function(playAnimation) {
+          if (!animationCompleted) {
+            animationPaused = !playAnimation;
+            if (timings.animationDuration) {
+              var value = blockKeyframeAnimations(node, animationPaused);
+              animationPaused
+                  ? temporaryStyles.push(value)
+                  : removeFromArray(temporaryStyles, value);
+            }
+          } else if (animationPaused && playAnimation) {
+            animationPaused = false;
+            close();
+          }
+        };
+
+        // checking the stagger duration prevents an accidentally cascade of the CSS delay style
+        // being inherited from the parent. If the transition duration is zero then we can safely
+        // rely that the delay value is an intentional stagger delay style.
+        var maxStagger = itemIndex > 0
+                         && ((timings.transitionDuration && stagger.transitionDuration === 0) ||
+                            (timings.animationDuration && stagger.animationDuration === 0))
+                         && Math.max(stagger.animationDelay, stagger.transitionDelay);
+        if (maxStagger) {
+          $timeout(triggerAnimationStart,
+                   Math.floor(maxStagger * itemIndex * ONE_SECOND),
+                   false);
+        } else {
+          triggerAnimationStart();
+        }
+
+        // this will decorate the existing promise runner with pause/resume methods
+        runnerHost.resume = function() {
+          playPause(true);
+        };
+
+        runnerHost.pause = function() {
+          playPause(false);
+        };
+
+        function triggerAnimationStart() {
+          // just incase a stagger animation kicks in when the animation
+          // itself was cancelled entirely
+          if (animationClosed) return;
+
+          applyBlocking(false);
+
+          forEach(temporaryStyles, function(entry) {
+            var key = entry[0];
+            var value = entry[1];
+            node.style[key] = value;
+          });
+
+          applyAnimationClasses(element, options);
+          $$jqLite.addClass(element, activeClasses);
+
+          if (flags.recalculateTimingStyles) {
+            fullClassName = node.className + ' ' + preparationClasses;
+            cacheKey = gcsHashFn(node, fullClassName);
+
+            timings = computeTimings(node, fullClassName, cacheKey);
+            relativeDelay = timings.maxDelay;
+            maxDelay = Math.max(relativeDelay, 0);
+            maxDuration = timings.maxDuration;
+
+            if (maxDuration === 0) {
+              close();
+              return;
+            }
+
+            flags.hasTransitions = timings.transitionDuration > 0;
+            flags.hasAnimations = timings.animationDuration > 0;
+          }
+
+          if (flags.applyAnimationDelay) {
+            relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay)
+                  ? parseFloat(options.delay)
+                  : relativeDelay;
+
+            maxDelay = Math.max(relativeDelay, 0);
+            timings.animationDelay = relativeDelay;
+            delayStyle = getCssDelayStyle(relativeDelay, true);
+            temporaryStyles.push(delayStyle);
+            node.style[delayStyle[0]] = delayStyle[1];
+          }
+
+          maxDelayTime = maxDelay * ONE_SECOND;
+          maxDurationTime = maxDuration * ONE_SECOND;
+
+          if (options.easing) {
+            var easeProp, easeVal = options.easing;
+            if (flags.hasTransitions) {
+              easeProp = TRANSITION_PROP + TIMING_KEY;
+              temporaryStyles.push([easeProp, easeVal]);
+              node.style[easeProp] = easeVal;
+            }
+            if (flags.hasAnimations) {
+              easeProp = ANIMATION_PROP + TIMING_KEY;
+              temporaryStyles.push([easeProp, easeVal]);
+              node.style[easeProp] = easeVal;
+            }
+          }
+
+          if (timings.transitionDuration) {
+            events.push(TRANSITIONEND_EVENT);
+          }
+
+          if (timings.animationDuration) {
+            events.push(ANIMATIONEND_EVENT);
+          }
+
+          startTime = Date.now();
+          var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;
+          var endTime = startTime + timerTime;
+
+          var animationsData = element.data(ANIMATE_TIMER_KEY) || [];
+          var setupFallbackTimer = true;
+          if (animationsData.length) {
+            var currentTimerData = animationsData[0];
+            setupFallbackTimer = endTime > currentTimerData.expectedEndTime;
+            if (setupFallbackTimer) {
+              $timeout.cancel(currentTimerData.timer);
+            } else {
+              animationsData.push(close);
+            }
+          }
+
+          if (setupFallbackTimer) {
+            var timer = $timeout(onAnimationExpired, timerTime, false);
+            animationsData[0] = {
+              timer: timer,
+              expectedEndTime: endTime
+            };
+            animationsData.push(close);
+            element.data(ANIMATE_TIMER_KEY, animationsData);
+          }
+
+          if (events.length) {
+            element.on(events.join(' '), onAnimationProgress);
+          }
+
+          if (options.to) {
+            if (options.cleanupStyles) {
+              registerRestorableStyles(restoreStyles, node, Object.keys(options.to));
+            }
+            applyAnimationToStyles(element, options);
+          }
+        }
+
+        function onAnimationExpired() {
+          var animationsData = element.data(ANIMATE_TIMER_KEY);
+
+          // this will be false in the event that the element was
+          // removed from the DOM (via a leave animation or something
+          // similar)
+          if (animationsData) {
+            for (var i = 1; i < animationsData.length; i++) {
+              animationsData[i]();
+            }
+            element.removeData(ANIMATE_TIMER_KEY);
+          }
+        }
+      }
+    };
+  }];
+}];
+
+var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationProvider) {
+  $$animationProvider.drivers.push('$$animateCssDriver');
+
+  var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';
+  var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';
+
+  var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';
+  var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';
+
+  function isDocumentFragment(node) {
+    return node.parentNode && node.parentNode.nodeType === 11;
+  }
+
+  this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',
+       function($animateCss,   $rootScope,   $$AnimateRunner,   $rootElement,   $sniffer,   $$jqLite,   $document) {
+
+    // only browsers that support these properties can render animations
+    if (!$sniffer.animations && !$sniffer.transitions) return noop;
+
+    var bodyNode = $document[0].body;
+    var rootNode = getDomNode($rootElement);
+
+    var rootBodyElement = jqLite(
+      // this is to avoid using something that exists outside of the body
+      // we also special case the doc fragment case because our unit test code
+      // appends the $rootElement to the body after the app has been bootstrapped
+      isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode
+    );
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+    return function initDriverFn(animationDetails) {
+      return animationDetails.from && animationDetails.to
+          ? prepareFromToAnchorAnimation(animationDetails.from,
+                                         animationDetails.to,
+                                         animationDetails.classes,
+                                         animationDetails.anchors)
+          : prepareRegularAnimation(animationDetails);
+    };
+
+    function filterCssClasses(classes) {
+      //remove all the `ng-` stuff
+      return classes.replace(/\bng-\S+\b/g, '');
+    }
+
+    function getUniqueValues(a, b) {
+      if (isString(a)) a = a.split(' ');
+      if (isString(b)) b = b.split(' ');
+      return a.filter(function(val) {
+        return b.indexOf(val) === -1;
+      }).join(' ');
+    }
+
+    function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {
+      var clone = jqLite(getDomNode(outAnchor).cloneNode(true));
+      var startingClasses = filterCssClasses(getClassVal(clone));
+
+      outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);
+      inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);
+
+      clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);
+
+      rootBodyElement.append(clone);
+
+      var animatorIn, animatorOut = prepareOutAnimation();
+
+      // the user may not end up using the `out` animation and
+      // only making use of the `in` animation or vice-versa.
+      // In either case we should allow this and not assume the
+      // animation is over unless both animations are not used.
+      if (!animatorOut) {
+        animatorIn = prepareInAnimation();
+        if (!animatorIn) {
+          return end();
+        }
+      }
+
+      var startingAnimator = animatorOut || animatorIn;
+
+      return {
+        start: function() {
+          var runner;
+
+          var currentAnimation = startingAnimator.start();
+          currentAnimation.done(function() {
+            currentAnimation = null;
+            if (!animatorIn) {
+              animatorIn = prepareInAnimation();
+              if (animatorIn) {
+                currentAnimation = animatorIn.start();
+                currentAnimation.done(function() {
+                  currentAnimation = null;
+                  end();
+                  runner.complete();
+                });
+                return currentAnimation;
+              }
+            }
+            // in the event that there is no `in` animation
+            end();
+            runner.complete();
+          });
+
+          runner = new $$AnimateRunner({
+            end: endFn,
+            cancel: endFn
+          });
+
+          return runner;
+
+          function endFn() {
+            if (currentAnimation) {
+              currentAnimation.end();
+            }
+          }
+        }
+      };
+
+      function calculateAnchorStyles(anchor) {
+        var styles = {};
+
+        var coords = getDomNode(anchor).getBoundingClientRect();
+
+        // we iterate directly since safari messes up and doesn't return
+        // all the keys for the coords object when iterated
+        forEach(['width','height','top','left'], function(key) {
+          var value = coords[key];
+          switch (key) {
+            case 'top':
+              value += bodyNode.scrollTop;
+              break;
+            case 'left':
+              value += bodyNode.scrollLeft;
+              break;
+          }
+          styles[key] = Math.floor(value) + 'px';
+        });
+        return styles;
+      }
+
+      function prepareOutAnimation() {
+        var animator = $animateCss(clone, {
+          addClass: NG_OUT_ANCHOR_CLASS_NAME,
+          delay: true,
+          from: calculateAnchorStyles(outAnchor)
+        });
+
+        // read the comment within `prepareRegularAnimation` to understand
+        // why this check is necessary
+        return animator.$$willAnimate ? animator : null;
+      }
+
+      function getClassVal(element) {
+        return element.attr('class') || '';
+      }
+
+      function prepareInAnimation() {
+        var endingClasses = filterCssClasses(getClassVal(inAnchor));
+        var toAdd = getUniqueValues(endingClasses, startingClasses);
+        var toRemove = getUniqueValues(startingClasses, endingClasses);
+
+        var animator = $animateCss(clone, {
+          to: calculateAnchorStyles(inAnchor),
+          addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,
+          removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,
+          delay: true
+        });
+
+        // read the comment within `prepareRegularAnimation` to understand
+        // why this check is necessary
+        return animator.$$willAnimate ? animator : null;
+      }
+
+      function end() {
+        clone.remove();
+        outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);
+        inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);
+      }
+    }
+
+    function prepareFromToAnchorAnimation(from, to, classes, anchors) {
+      var fromAnimation = prepareRegularAnimation(from, noop);
+      var toAnimation = prepareRegularAnimation(to, noop);
+
+      var anchorAnimations = [];
+      forEach(anchors, function(anchor) {
+        var outElement = anchor['out'];
+        var inElement = anchor['in'];
+        var animator = prepareAnchoredAnimation(classes, outElement, inElement);
+        if (animator) {
+          anchorAnimations.push(animator);
+        }
+      });
+
+      // no point in doing anything when there are no elements to animate
+      if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;
+
+      return {
+        start: function() {
+          var animationRunners = [];
+
+          if (fromAnimation) {
+            animationRunners.push(fromAnimation.start());
+          }
+
+          if (toAnimation) {
+            animationRunners.push(toAnimation.start());
+          }
+
+          forEach(anchorAnimations, function(animation) {
+            animationRunners.push(animation.start());
+          });
+
+          var runner = new $$AnimateRunner({
+            end: endFn,
+            cancel: endFn // CSS-driven animations cannot be cancelled, only ended
+          });
+
+          $$AnimateRunner.all(animationRunners, function(status) {
+            runner.complete(status);
+          });
+
+          return runner;
+
+          function endFn() {
+            forEach(animationRunners, function(runner) {
+              runner.end();
+            });
+          }
+        }
+      };
+    }
+
+    function prepareRegularAnimation(animationDetails) {
+      var element = animationDetails.element;
+      var options = animationDetails.options || {};
+
+      if (animationDetails.structural) {
+        options.event = animationDetails.event;
+        options.structural = true;
+        options.applyClassesEarly = true;
+
+        // we special case the leave animation since we want to ensure that
+        // the element is removed as soon as the animation is over. Otherwise
+        // a flicker might appear or the element may not be removed at all
+        if (animationDetails.event === 'leave') {
+          options.onDone = options.domOperation;
+        }
+      }
+
+      // We assign the preparationClasses as the actual animation event since
+      // the internals of $animateCss will just suffix the event token values
+      // with `-active` to trigger the animation.
+      if (options.preparationClasses) {
+        options.event = concatWithSpace(options.event, options.preparationClasses);
+      }
+
+      var animator = $animateCss(element, options);
+
+      // the driver lookup code inside of $$animation attempts to spawn a
+      // driver one by one until a driver returns a.$$willAnimate animator object.
+      // $animateCss will always return an object, however, it will pass in
+      // a flag as a hint as to whether an animation was detected or not
+      return animator.$$willAnimate ? animator : null;
+    }
+  }];
+}];
+
+// TODO(matsko): use caching here to speed things up for detection
+// TODO(matsko): add documentation
+//  by the time...
+
+var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
+  this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',
+       function($injector,   $$AnimateRunner,   $$jqLite) {
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+         // $animateJs(element, 'enter');
+    return function(element, event, classes, options) {
+      var animationClosed = false;
+
+      // the `classes` argument is optional and if it is not used
+      // then the classes will be resolved from the element's className
+      // property as well as options.addClass/options.removeClass.
+      if (arguments.length === 3 && isObject(classes)) {
+        options = classes;
+        classes = null;
+      }
+
+      options = prepareAnimationOptions(options);
+      if (!classes) {
+        classes = element.attr('class') || '';
+        if (options.addClass) {
+          classes += ' ' + options.addClass;
+        }
+        if (options.removeClass) {
+          classes += ' ' + options.removeClass;
+        }
+      }
+
+      var classesToAdd = options.addClass;
+      var classesToRemove = options.removeClass;
+
+      // the lookupAnimations function returns a series of animation objects that are
+      // matched up with one or more of the CSS classes. These animation objects are
+      // defined via the module.animation factory function. If nothing is detected then
+      // we don't return anything which then makes $animation query the next driver.
+      var animations = lookupAnimations(classes);
+      var before, after;
+      if (animations.length) {
+        var afterFn, beforeFn;
+        if (event == 'leave') {
+          beforeFn = 'leave';
+          afterFn = 'afterLeave'; // TODO(matsko): get rid of this
+        } else {
+          beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);
+          afterFn = event;
+        }
+
+        if (event !== 'enter' && event !== 'move') {
+          before = packageAnimations(element, event, options, animations, beforeFn);
+        }
+        after  = packageAnimations(element, event, options, animations, afterFn);
+      }
+
+      // no matching animations
+      if (!before && !after) return;
+
+      function applyOptions() {
+        options.domOperation();
+        applyAnimationClasses(element, options);
+      }
+
+      function close() {
+        animationClosed = true;
+        applyOptions();
+        applyAnimationStyles(element, options);
+      }
+
+      var runner;
+
+      return {
+        $$willAnimate: true,
+        end: function() {
+          if (runner) {
+            runner.end();
+          } else {
+            close();
+            runner = new $$AnimateRunner();
+            runner.complete(true);
+          }
+          return runner;
+        },
+        start: function() {
+          if (runner) {
+            return runner;
+          }
+
+          runner = new $$AnimateRunner();
+          var closeActiveAnimations;
+          var chain = [];
+
+          if (before) {
+            chain.push(function(fn) {
+              closeActiveAnimations = before(fn);
+            });
+          }
+
+          if (chain.length) {
+            chain.push(function(fn) {
+              applyOptions();
+              fn(true);
+            });
+          } else {
+            applyOptions();
+          }
+
+          if (after) {
+            chain.push(function(fn) {
+              closeActiveAnimations = after(fn);
+            });
+          }
+
+          runner.setHost({
+            end: function() {
+              endAnimations();
+            },
+            cancel: function() {
+              endAnimations(true);
+            }
+          });
+
+          $$AnimateRunner.chain(chain, onComplete);
+          return runner;
+
+          function onComplete(success) {
+            close(success);
+            runner.complete(success);
+          }
+
+          function endAnimations(cancelled) {
+            if (!animationClosed) {
+              (closeActiveAnimations || noop)(cancelled);
+              onComplete(cancelled);
+            }
+          }
+        }
+      };
+
+      function executeAnimationFn(fn, element, event, options, onDone) {
+        var args;
+        switch (event) {
+          case 'animate':
+            args = [element, options.from, options.to, onDone];
+            break;
+
+          case 'setClass':
+            args = [element, classesToAdd, classesToRemove, onDone];
+            break;
+
+          case 'addClass':
+            args = [element, classesToAdd, onDone];
+            break;
+
+          case 'removeClass':
+            args = [element, classesToRemove, onDone];
+            break;
+
+          default:
+            args = [element, onDone];
+            break;
+        }
+
+        args.push(options);
+
+        var value = fn.apply(fn, args);
+        if (value) {
+          if (isFunction(value.start)) {
+            value = value.start();
+          }
+
+          if (value instanceof $$AnimateRunner) {
+            value.done(onDone);
+          } else if (isFunction(value)) {
+            // optional onEnd / onCancel callback
+            return value;
+          }
+        }
+
+        return noop;
+      }
+
+      function groupEventedAnimations(element, event, options, animations, fnName) {
+        var operations = [];
+        forEach(animations, function(ani) {
+          var animation = ani[fnName];
+          if (!animation) return;
+
+          // note that all of these animations will run in parallel
+          operations.push(function() {
+            var runner;
+            var endProgressCb;
+
+            var resolved = false;
+            var onAnimationComplete = function(rejected) {
+              if (!resolved) {
+                resolved = true;
+                (endProgressCb || noop)(rejected);
+                runner.complete(!rejected);
+              }
+            };
+
+            runner = new $$AnimateRunner({
+              end: function() {
+                onAnimationComplete();
+              },
+              cancel: function() {
+                onAnimationComplete(true);
+              }
+            });
+
+            endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {
+              var cancelled = result === false;
+              onAnimationComplete(cancelled);
+            });
+
+            return runner;
+          });
+        });
+
+        return operations;
+      }
+
+      function packageAnimations(element, event, options, animations, fnName) {
+        var operations = groupEventedAnimations(element, event, options, animations, fnName);
+        if (operations.length === 0) {
+          var a,b;
+          if (fnName === 'beforeSetClass') {
+            a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');
+            b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');
+          } else if (fnName === 'setClass') {
+            a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');
+            b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');
+          }
+
+          if (a) {
+            operations = operations.concat(a);
+          }
+          if (b) {
+            operations = operations.concat(b);
+          }
+        }
+
+        if (operations.length === 0) return;
+
+        // TODO(matsko): add documentation
+        return function startAnimation(callback) {
+          var runners = [];
+          if (operations.length) {
+            forEach(operations, function(animateFn) {
+              runners.push(animateFn());
+            });
+          }
+
+          runners.length ? $$AnimateRunner.all(runners, callback) : callback();
+
+          return function endFn(reject) {
+            forEach(runners, function(runner) {
+              reject ? runner.cancel() : runner.end();
+            });
+          };
+        };
+      }
+    };
+
+    function lookupAnimations(classes) {
+      classes = isArray(classes) ? classes : classes.split(' ');
+      var matches = [], flagMap = {};
+      for (var i=0; i < classes.length; i++) {
+        var klass = classes[i],
+            animationFactory = $animateProvider.$$registeredAnimations[klass];
+        if (animationFactory && !flagMap[klass]) {
+          matches.push($injector.get(animationFactory));
+          flagMap[klass] = true;
+        }
+      }
+      return matches;
+    }
+  }];
+}];
+
+var $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProvider) {
+  $$animationProvider.drivers.push('$$animateJsDriver');
+  this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {
+    return function initDriverFn(animationDetails) {
+      if (animationDetails.from && animationDetails.to) {
+        var fromAnimation = prepareAnimation(animationDetails.from);
+        var toAnimation = prepareAnimation(animationDetails.to);
+        if (!fromAnimation && !toAnimation) return;
+
+        return {
+          start: function() {
+            var animationRunners = [];
+
+            if (fromAnimation) {
+              animationRunners.push(fromAnimation.start());
+            }
+
+            if (toAnimation) {
+              animationRunners.push(toAnimation.start());
+            }
+
+            $$AnimateRunner.all(animationRunners, done);
+
+            var runner = new $$AnimateRunner({
+              end: endFnFactory(),
+              cancel: endFnFactory()
+            });
+
+            return runner;
+
+            function endFnFactory() {
+              return function() {
+                forEach(animationRunners, function(runner) {
+                  // at this point we cannot cancel animations for groups just yet. 1.5+
+                  runner.end();
+                });
+              };
+            }
+
+            function done(status) {
+              runner.complete(status);
+            }
+          }
+        };
+      } else {
+        return prepareAnimation(animationDetails);
+      }
+    };
+
+    function prepareAnimation(animationDetails) {
+      // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations
+      var element = animationDetails.element;
+      var event = animationDetails.event;
+      var options = animationDetails.options;
+      var classes = animationDetails.classes;
+      return $$animateJs(element, event, classes, options);
+    }
+  }];
+}];
+
+var NG_ANIMATE_ATTR_NAME = 'data-ng-animate';
+var NG_ANIMATE_PIN_DATA = '$ngAnimatePin';
+var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
+  var PRE_DIGEST_STATE = 1;
+  var RUNNING_STATE = 2;
+  var ONE_SPACE = ' ';
+
+  var rules = this.rules = {
+    skip: [],
+    cancel: [],
+    join: []
+  };
+
+  function makeTruthyCssClassMap(classString) {
+    if (!classString) {
+      return null;
+    }
+
+    var keys = classString.split(ONE_SPACE);
+    var map = Object.create(null);
+
+    forEach(keys, function(key) {
+      map[key] = true;
+    });
+    return map;
+  }
+
+  function hasMatchingClasses(newClassString, currentClassString) {
+    if (newClassString && currentClassString) {
+      var currentClassMap = makeTruthyCssClassMap(currentClassString);
+      return newClassString.split(ONE_SPACE).some(function(className) {
+        return currentClassMap[className];
+      });
+    }
+  }
+
+  function isAllowed(ruleType, element, currentAnimation, previousAnimation) {
+    return rules[ruleType].some(function(fn) {
+      return fn(element, currentAnimation, previousAnimation);
+    });
+  }
+
+  function hasAnimationClasses(animation, and) {
+    var a = (animation.addClass || '').length > 0;
+    var b = (animation.removeClass || '').length > 0;
+    return and ? a && b : a || b;
+  }
+
+  rules.join.push(function(element, newAnimation, currentAnimation) {
+    // if the new animation is class-based then we can just tack that on
+    return !newAnimation.structural && hasAnimationClasses(newAnimation);
+  });
+
+  rules.skip.push(function(element, newAnimation, currentAnimation) {
+    // there is no need to animate anything if no classes are being added and
+    // there is no structural animation that will be triggered
+    return !newAnimation.structural && !hasAnimationClasses(newAnimation);
+  });
+
+  rules.skip.push(function(element, newAnimation, currentAnimation) {
+    // why should we trigger a new structural animation if the element will
+    // be removed from the DOM anyway?
+    return currentAnimation.event == 'leave' && newAnimation.structural;
+  });
+
+  rules.skip.push(function(element, newAnimation, currentAnimation) {
+    // if there is an ongoing current animation then don't even bother running the class-based animation
+    return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;
+  });
+
+  rules.cancel.push(function(element, newAnimation, currentAnimation) {
+    // there can never be two structural animations running at the same time
+    return currentAnimation.structural && newAnimation.structural;
+  });
+
+  rules.cancel.push(function(element, newAnimation, currentAnimation) {
+    // if the previous animation is already running, but the new animation will
+    // be triggered, but the new animation is structural
+    return currentAnimation.state === RUNNING_STATE && newAnimation.structural;
+  });
+
+  rules.cancel.push(function(element, newAnimation, currentAnimation) {
+    var nA = newAnimation.addClass;
+    var nR = newAnimation.removeClass;
+    var cA = currentAnimation.addClass;
+    var cR = currentAnimation.removeClass;
+
+    // early detection to save the global CPU shortage :)
+    if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) {
+      return false;
+    }
+
+    return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA);
+  });
+
+  this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',
+               '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',
+       function($$rAF,   $rootScope,   $rootElement,   $document,   $$HashMap,
+                $$animation,   $$AnimateRunner,   $templateRequest,   $$jqLite,   $$forceReflow) {
+
+    var activeAnimationsLookup = new $$HashMap();
+    var disabledElementsLookup = new $$HashMap();
+    var animationsEnabled = null;
+
+    function postDigestTaskFactory() {
+      var postDigestCalled = false;
+      return function(fn) {
+        // we only issue a call to postDigest before
+        // it has first passed. This prevents any callbacks
+        // from not firing once the animation has completed
+        // since it will be out of the digest cycle.
+        if (postDigestCalled) {
+          fn();
+        } else {
+          $rootScope.$$postDigest(function() {
+            postDigestCalled = true;
+            fn();
+          });
+        }
+      };
+    }
+
+    // Wait until all directive and route-related templates are downloaded and
+    // compiled. The $templateRequest.totalPendingRequests variable keeps track of
+    // all of the remote templates being currently downloaded. If there are no
+    // templates currently downloading then the watcher will still fire anyway.
+    var deregisterWatch = $rootScope.$watch(
+      function() { return $templateRequest.totalPendingRequests === 0; },
+      function(isEmpty) {
+        if (!isEmpty) return;
+        deregisterWatch();
+
+        // Now that all templates have been downloaded, $animate will wait until
+        // the post digest queue is empty before enabling animations. By having two
+        // calls to $postDigest calls we can ensure that the flag is enabled at the
+        // very end of the post digest queue. Since all of the animations in $animate
+        // use $postDigest, it's important that the code below executes at the end.
+        // This basically means that the page is fully downloaded and compiled before
+        // any animations are triggered.
+        $rootScope.$$postDigest(function() {
+          $rootScope.$$postDigest(function() {
+            // we check for null directly in the event that the application already called
+            // .enabled() with whatever arguments that it provided it with
+            if (animationsEnabled === null) {
+              animationsEnabled = true;
+            }
+          });
+        });
+      }
+    );
+
+    var callbackRegistry = {};
+
+    // remember that the classNameFilter is set during the provider/config
+    // stage therefore we can optimize here and setup a helper function
+    var classNameFilter = $animateProvider.classNameFilter();
+    var isAnimatableClassName = !classNameFilter
+              ? function() { return true; }
+              : function(className) {
+                return classNameFilter.test(className);
+              };
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+    function normalizeAnimationDetails(element, animation) {
+      return mergeAnimationDetails(element, animation, {});
+    }
+
+    // IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259.
+    var contains = Node.prototype.contains || function(arg) {
+      // jshint bitwise: false
+      return this === arg || !!(this.compareDocumentPosition(arg) & 16);
+      // jshint bitwise: true
+    };
+
+    function findCallbacks(parent, element, event) {
+      var targetNode = getDomNode(element);
+      var targetParentNode = getDomNode(parent);
+
+      var matches = [];
+      var entries = callbackRegistry[event];
+      if (entries) {
+        forEach(entries, function(entry) {
+          if (contains.call(entry.node, targetNode)) {
+            matches.push(entry.callback);
+          } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) {
+            matches.push(entry.callback);
+          }
+        });
+      }
+
+      return matches;
+    }
+
+    return {
+      on: function(event, container, callback) {
+        var node = extractElementNode(container);
+        callbackRegistry[event] = callbackRegistry[event] || [];
+        callbackRegistry[event].push({
+          node: node,
+          callback: callback
+        });
+      },
+
+      off: function(event, container, callback) {
+        var entries = callbackRegistry[event];
+        if (!entries) return;
+
+        callbackRegistry[event] = arguments.length === 1
+            ? null
+            : filterFromRegistry(entries, container, callback);
+
+        function filterFromRegistry(list, matchContainer, matchCallback) {
+          var containerNode = extractElementNode(matchContainer);
+          return list.filter(function(entry) {
+            var isMatch = entry.node === containerNode &&
+                            (!matchCallback || entry.callback === matchCallback);
+            return !isMatch;
+          });
+        }
+      },
+
+      pin: function(element, parentElement) {
+        assertArg(isElement(element), 'element', 'not an element');
+        assertArg(isElement(parentElement), 'parentElement', 'not an element');
+        element.data(NG_ANIMATE_PIN_DATA, parentElement);
+      },
+
+      push: function(element, event, options, domOperation) {
+        options = options || {};
+        options.domOperation = domOperation;
+        return queueAnimation(element, event, options);
+      },
+
+      // this method has four signatures:
+      //  () - global getter
+      //  (bool) - global setter
+      //  (element) - element getter
+      //  (element, bool) - element setter<F37>
+      enabled: function(element, bool) {
+        var argCount = arguments.length;
+
+        if (argCount === 0) {
+          // () - Global getter
+          bool = !!animationsEnabled;
+        } else {
+          var hasElement = isElement(element);
+
+          if (!hasElement) {
+            // (bool) - Global setter
+            bool = animationsEnabled = !!element;
+          } else {
+            var node = getDomNode(element);
+            var recordExists = disabledElementsLookup.get(node);
+
+            if (argCount === 1) {
+              // (element) - Element getter
+              bool = !recordExists;
+            } else {
+              // (element, bool) - Element setter
+              disabledElementsLookup.put(node, !bool);
+            }
+          }
+        }
+
+        return bool;
+      }
+    };
+
+    function queueAnimation(element, event, initialOptions) {
+      // we always make a copy of the options since
+      // there should never be any side effects on
+      // the input data when running `$animateCss`.
+      var options = copy(initialOptions);
+
+      var node, parent;
+      element = stripCommentsFromElement(element);
+      if (element) {
+        node = getDomNode(element);
+        parent = element.parent();
+      }
+
+      options = prepareAnimationOptions(options);
+
+      // we create a fake runner with a working promise.
+      // These methods will become available after the digest has passed
+      var runner = new $$AnimateRunner();
+
+      // this is used to trigger callbacks in postDigest mode
+      var runInNextPostDigestOrNow = postDigestTaskFactory();
+
+      if (isArray(options.addClass)) {
+        options.addClass = options.addClass.join(' ');
+      }
+
+      if (options.addClass && !isString(options.addClass)) {
+        options.addClass = null;
+      }
+
+      if (isArray(options.removeClass)) {
+        options.removeClass = options.removeClass.join(' ');
+      }
+
+      if (options.removeClass && !isString(options.removeClass)) {
+        options.removeClass = null;
+      }
+
+      if (options.fr

<TRUNCATED>

[03/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve.js
new file mode 100644
index 0000000..0acd86f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ve.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Swondaha",
+      "Musumbuluwo",
+      "\u1e3cavhuvhili",
+      "\u1e3cavhuraru",
+      "\u1e3cavhu\u1e4ba",
+      "\u1e3cavhu\u1e71anu",
+      "Mugivhela"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Phando",
+      "Luhuhi",
+      "\u1e70hafamuhwe",
+      "Lambamai",
+      "Shundunthule",
+      "Fulwi",
+      "Fulwana",
+      "\u1e70hangule",
+      "Khubvumedzi",
+      "Tshimedzi",
+      "\u1e3cara",
+      "Nyendavhusiku"
+    ],
+    "SHORTDAY": [
+      "Swo",
+      "Mus",
+      "Vhi",
+      "Rar",
+      "\u1e4aa",
+      "\u1e70an",
+      "Mug"
+    ],
+    "SHORTMONTH": [
+      "Pha",
+      "Luh",
+      "\u1e70hf",
+      "Lam",
+      "Shu",
+      "Lwi",
+      "Lwa",
+      "\u1e70ha",
+      "Khu",
+      "Tsh",
+      "\u1e3car",
+      "Nye"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ve",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi-vn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi-vn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi-vn.js
new file mode 100644
index 0000000..bd1ff23
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi-vn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "SA",
+      "CH"
+    ],
+    "DAY": [
+      "Ch\u1ee7 Nh\u1eadt",
+      "Th\u1ee9 Hai",
+      "Th\u1ee9 Ba",
+      "Th\u1ee9 T\u01b0",
+      "Th\u1ee9 N\u0103m",
+      "Th\u1ee9 S\u00e1u",
+      "Th\u1ee9 B\u1ea3y"
+    ],
+    "ERANAMES": [
+      "tr. CN",
+      "sau CN"
+    ],
+    "ERAS": [
+      "tr. CN",
+      "sau CN"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "th\u00e1ng 1",
+      "th\u00e1ng 2",
+      "th\u00e1ng 3",
+      "th\u00e1ng 4",
+      "th\u00e1ng 5",
+      "th\u00e1ng 6",
+      "th\u00e1ng 7",
+      "th\u00e1ng 8",
+      "th\u00e1ng 9",
+      "th\u00e1ng 10",
+      "th\u00e1ng 11",
+      "th\u00e1ng 12"
+    ],
+    "SHORTDAY": [
+      "CN",
+      "Th 2",
+      "Th 3",
+      "Th 4",
+      "Th 5",
+      "Th 6",
+      "Th 7"
+    ],
+    "SHORTMONTH": [
+      "thg 1",
+      "thg 2",
+      "thg 3",
+      "thg 4",
+      "thg 5",
+      "thg 6",
+      "thg 7",
+      "thg 8",
+      "thg 9",
+      "thg 10",
+      "thg 11",
+      "thg 12"
+    ],
+    "STANDALONEMONTH": [
+      "Th\u00e1ng 1",
+      "Th\u00e1ng 2",
+      "Th\u00e1ng 3",
+      "Th\u00e1ng 4",
+      "Th\u00e1ng 5",
+      "Th\u00e1ng 6",
+      "Th\u00e1ng 7",
+      "Th\u00e1ng 8",
+      "Th\u00e1ng 9",
+      "Th\u00e1ng 10",
+      "Th\u00e1ng 11",
+      "Th\u00e1ng 12"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y",
+    "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' MM 'n\u0103m' y",
+    "medium": "dd-MM-y HH:mm:ss",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ab",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "vi-vn",
+  "localeID": "vi_VN",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi.js
new file mode 100644
index 0000000..cae6f1b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vi.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "SA",
+      "CH"
+    ],
+    "DAY": [
+      "Ch\u1ee7 Nh\u1eadt",
+      "Th\u1ee9 Hai",
+      "Th\u1ee9 Ba",
+      "Th\u1ee9 T\u01b0",
+      "Th\u1ee9 N\u0103m",
+      "Th\u1ee9 S\u00e1u",
+      "Th\u1ee9 B\u1ea3y"
+    ],
+    "ERANAMES": [
+      "tr. CN",
+      "sau CN"
+    ],
+    "ERAS": [
+      "tr. CN",
+      "sau CN"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "th\u00e1ng 1",
+      "th\u00e1ng 2",
+      "th\u00e1ng 3",
+      "th\u00e1ng 4",
+      "th\u00e1ng 5",
+      "th\u00e1ng 6",
+      "th\u00e1ng 7",
+      "th\u00e1ng 8",
+      "th\u00e1ng 9",
+      "th\u00e1ng 10",
+      "th\u00e1ng 11",
+      "th\u00e1ng 12"
+    ],
+    "SHORTDAY": [
+      "CN",
+      "Th 2",
+      "Th 3",
+      "Th 4",
+      "Th 5",
+      "Th 6",
+      "Th 7"
+    ],
+    "SHORTMONTH": [
+      "thg 1",
+      "thg 2",
+      "thg 3",
+      "thg 4",
+      "thg 5",
+      "thg 6",
+      "thg 7",
+      "thg 8",
+      "thg 9",
+      "thg 10",
+      "thg 11",
+      "thg 12"
+    ],
+    "STANDALONEMONTH": [
+      "Th\u00e1ng 1",
+      "Th\u00e1ng 2",
+      "Th\u00e1ng 3",
+      "Th\u00e1ng 4",
+      "Th\u00e1ng 5",
+      "Th\u00e1ng 6",
+      "Th\u00e1ng 7",
+      "Th\u00e1ng 8",
+      "Th\u00e1ng 9",
+      "Th\u00e1ng 10",
+      "Th\u00e1ng 11",
+      "Th\u00e1ng 12"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y",
+    "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' MM 'n\u0103m' y",
+    "medium": "dd-MM-y HH:mm:ss",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ab",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "vi",
+  "localeID": "vi",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo-001.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo-001.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo-001.js
new file mode 100644
index 0000000..a17a26d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo-001.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "posz.",
+      "b\u00fcz."
+    ],
+    "DAY": [
+      "sudel",
+      "mudel",
+      "tudel",
+      "vedel",
+      "d\u00f6del",
+      "fridel",
+      "z\u00e4del"
+    ],
+    "ERANAMES": [
+      "b. t. kr.",
+      "p. t. kr."
+    ],
+    "ERAS": [
+      "b. t. kr.",
+      "p. t. kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janul",
+      "febul",
+      "m\u00e4zil",
+      "prilul",
+      "mayul",
+      "yunul",
+      "yulul",
+      "gustul",
+      "setul",
+      "tobul",
+      "novul",
+      "dekul"
+    ],
+    "SHORTDAY": [
+      "su.",
+      "mu.",
+      "tu.",
+      "ve.",
+      "d\u00f6.",
+      "fr.",
+      "z\u00e4."
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "m\u00e4z",
+      "prl",
+      "may",
+      "yun",
+      "yul",
+      "gst",
+      "set",
+      "ton",
+      "nov",
+      "dek"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMMa 'd'. d'id'",
+    "longDate": "y MMMM d",
+    "medium": "y MMM. d HH:mm:ss",
+    "mediumDate": "y MMM. d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vo-001",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo.js
new file mode 100644
index 0000000..f850799
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vo.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "posz.",
+      "b\u00fcz."
+    ],
+    "DAY": [
+      "sudel",
+      "mudel",
+      "tudel",
+      "vedel",
+      "d\u00f6del",
+      "fridel",
+      "z\u00e4del"
+    ],
+    "ERANAMES": [
+      "b. t. kr.",
+      "p. t. kr."
+    ],
+    "ERAS": [
+      "b. t. kr.",
+      "p. t. kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janul",
+      "febul",
+      "m\u00e4zil",
+      "prilul",
+      "mayul",
+      "yunul",
+      "yulul",
+      "gustul",
+      "setul",
+      "tobul",
+      "novul",
+      "dekul"
+    ],
+    "SHORTDAY": [
+      "su.",
+      "mu.",
+      "tu.",
+      "ve.",
+      "d\u00f6.",
+      "fr.",
+      "z\u00e4."
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "m\u00e4z",
+      "prl",
+      "may",
+      "yun",
+      "yul",
+      "gst",
+      "set",
+      "ton",
+      "nov",
+      "dek"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMMa 'd'. d'id'",
+    "longDate": "y MMMM d",
+    "medium": "y MMM. d HH:mm:ss",
+    "mediumDate": "y MMM. d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun-tz.js
new file mode 100644
index 0000000..a25eb31
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "utuko",
+      "kyiukonyi"
+    ],
+    "DAY": [
+      "Jumapilyi",
+      "Jumatatuu",
+      "Jumanne",
+      "Jumatanu",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristu",
+      "Baada ya Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vun-tz",
+  "localeID": "vun_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun.js
new file mode 100644
index 0000000..f539e2c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_vun.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "utuko",
+      "kyiukonyi"
+    ],
+    "DAY": [
+      "Jumapilyi",
+      "Jumatatuu",
+      "Jumanne",
+      "Jumatanu",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristu",
+      "Baada ya Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "vun",
+  "localeID": "vun",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae-ch.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae-ch.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae-ch.js
new file mode 100644
index 0000000..92aa7e8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae-ch.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunntag",
+      "M\u00e4ntag",
+      "Zi\u0161tag",
+      "Mittwu\u010d",
+      "Fr\u00f3ntag",
+      "Fritag",
+      "Sam\u0161tag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr"
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jenner",
+      "Hornig",
+      "M\u00e4rze",
+      "Abrille",
+      "Meije",
+      "Br\u00e1\u010det",
+      "Heiwet",
+      "\u00d6ig\u0161te",
+      "Herb\u0161tm\u00e1net",
+      "W\u00edm\u00e1net",
+      "Winterm\u00e1net",
+      "Chri\u0161tm\u00e1net"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "M\u00e4n",
+      "Zi\u0161",
+      "Mit",
+      "Fr\u00f3",
+      "Fri",
+      "Sam"
+    ],
+    "SHORTMONTH": [
+      "Jen",
+      "Hor",
+      "M\u00e4r",
+      "Abr",
+      "Mei",
+      "Br\u00e1",
+      "Hei",
+      "\u00d6ig",
+      "Her",
+      "W\u00edm",
+      "Win",
+      "Chr"
+    ],
+    "STANDALONEMONTH": [
+      "Jenner",
+      "Hornig",
+      "M\u00e4rze",
+      "Abrille",
+      "Meije",
+      "Br\u00e1\u010det",
+      "Heiwet",
+      "\u00d6ig\u0161te",
+      "Herb\u0161tm\u00e1net",
+      "W\u00edm\u00e1net",
+      "Winterm\u00e1net",
+      "Chri\u0161tm\u00e1net"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "wae-ch",
+  "localeID": "wae_CH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae.js
new file mode 100644
index 0000000..12a13a1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wae.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunntag",
+      "M\u00e4ntag",
+      "Zi\u0161tag",
+      "Mittwu\u010d",
+      "Fr\u00f3ntag",
+      "Fritag",
+      "Sam\u0161tag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr"
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jenner",
+      "Hornig",
+      "M\u00e4rze",
+      "Abrille",
+      "Meije",
+      "Br\u00e1\u010det",
+      "Heiwet",
+      "\u00d6ig\u0161te",
+      "Herb\u0161tm\u00e1net",
+      "W\u00edm\u00e1net",
+      "Winterm\u00e1net",
+      "Chri\u0161tm\u00e1net"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "M\u00e4n",
+      "Zi\u0161",
+      "Mit",
+      "Fr\u00f3",
+      "Fri",
+      "Sam"
+    ],
+    "SHORTMONTH": [
+      "Jen",
+      "Hor",
+      "M\u00e4r",
+      "Abr",
+      "Mei",
+      "Br\u00e1",
+      "Hei",
+      "\u00d6ig",
+      "Her",
+      "W\u00edm",
+      "Win",
+      "Chr"
+    ],
+    "STANDALONEMONTH": [
+      "Jenner",
+      "Hornig",
+      "M\u00e4rze",
+      "Abrille",
+      "Meije",
+      "Br\u00e1\u010det",
+      "Heiwet",
+      "\u00d6ig\u0161te",
+      "Herb\u0161tm\u00e1net",
+      "W\u00edm\u00e1net",
+      "Winterm\u00e1net",
+      "Chri\u0161tm\u00e1net"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "wae",
+  "localeID": "wae",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal-et.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal-et.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal-et.js
new file mode 100644
index 0000000..16a842a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal-et.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u121b\u1208\u12f6",
+      "\u1243\u121b"
+    ],
+    "DAY": [
+      "\u12c8\u130b",
+      "\u1233\u12ed\u1296",
+      "\u121b\u1246\u1233\u129b",
+      "\u12a0\u1229\u12cb",
+      "\u1203\u1219\u1233",
+      "\u12a0\u122d\u1263",
+      "\u1244\u122b"
+    ],
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u12c8\u130b",
+      "\u1233\u12ed\u1296",
+      "\u121b\u1246\u1233\u129b",
+      "\u12a0\u1229\u12cb",
+      "\u1203\u1219\u1233",
+      "\u12a0\u122d\u1263",
+      "\u1244\u122b"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1270",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "fullDate": "EEEE\u1365 dd MMMM \u130b\u120b\u1233 y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "wal-et",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal.js
new file mode 100644
index 0000000..795c02d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_wal.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u121b\u1208\u12f6",
+      "\u1243\u121b"
+    ],
+    "DAY": [
+      "\u12c8\u130b",
+      "\u1233\u12ed\u1296",
+      "\u121b\u1246\u1233\u129b",
+      "\u12a0\u1229\u12cb",
+      "\u1203\u1219\u1233",
+      "\u12a0\u122d\u1263",
+      "\u1244\u122b"
+    ],
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u12c8\u130b",
+      "\u1233\u12ed\u1296",
+      "\u121b\u1246\u1233\u129b",
+      "\u12a0\u1229\u12cb",
+      "\u1203\u1219\u1233",
+      "\u12a0\u122d\u1263",
+      "\u1244\u122b"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1270",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "fullDate": "EEEE\u1365 dd MMMM \u130b\u120b\u1233 y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "wal",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh-za.js
new file mode 100644
index 0000000..5eeb809
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh-za.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Cawe",
+      "Mvulo",
+      "Lwesibini",
+      "Lwesithathu",
+      "Lwesine",
+      "Lwesihlanu",
+      "Mgqibelo"
+    ],
+    "MONTH": [
+      "Janyuwari",
+      "Februwari",
+      "Matshi",
+      "Epreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Agasti",
+      "Septemba",
+      "Okthoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Caw",
+      "Mvu",
+      "Bin",
+      "Tha",
+      "Sin",
+      "Hla",
+      "Mgq"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mat",
+      "Epr",
+      "Mey",
+      "Jun",
+      "Jul",
+      "Aga",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "xh-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh.js
new file mode 100644
index 0000000..756a9f7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xh.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Cawe",
+      "Mvulo",
+      "Lwesibini",
+      "Lwesithathu",
+      "Lwesine",
+      "Lwesihlanu",
+      "Mgqibelo"
+    ],
+    "MONTH": [
+      "Janyuwari",
+      "Februwari",
+      "Matshi",
+      "Epreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Agasti",
+      "Septemba",
+      "Okthoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Caw",
+      "Mvu",
+      "Bin",
+      "Tha",
+      "Sin",
+      "Hla",
+      "Mgq"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mat",
+      "Epr",
+      "Mey",
+      "Jun",
+      "Jul",
+      "Aga",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "xh",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog-ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog-ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog-ug.js
new file mode 100644
index 0000000..0e26580
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog-ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Munkyo",
+      "Eigulo"
+    ],
+    "DAY": [
+      "Sabiiti",
+      "Balaza",
+      "Owokubili",
+      "Owokusatu",
+      "Olokuna",
+      "Olokutaanu",
+      "Olomukaaga"
+    ],
+    "ERANAMES": [
+      "Kulisto nga azilawo",
+      "Kulisto nga affile"
+    ],
+    "ERAS": [
+      "AZ",
+      "AF"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Sabi",
+      "Bala",
+      "Kubi",
+      "Kusa",
+      "Kuna",
+      "Kuta",
+      "Muka"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apu",
+      "Maa",
+      "Juu",
+      "Jul",
+      "Agu",
+      "Seb",
+      "Oki",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "xog-ug",
+  "localeID": "xog_UG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog.js
new file mode 100644
index 0000000..7428689
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_xog.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Munkyo",
+      "Eigulo"
+    ],
+    "DAY": [
+      "Sabiiti",
+      "Balaza",
+      "Owokubili",
+      "Owokusatu",
+      "Olokuna",
+      "Olokutaanu",
+      "Olomukaaga"
+    ],
+    "ERANAMES": [
+      "Kulisto nga azilawo",
+      "Kulisto nga affile"
+    ],
+    "ERAS": [
+      "AZ",
+      "AF"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Sabi",
+      "Bala",
+      "Kubi",
+      "Kusa",
+      "Kuna",
+      "Kuta",
+      "Muka"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apu",
+      "Maa",
+      "Juu",
+      "Jul",
+      "Agu",
+      "Seb",
+      "Oki",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "xog",
+  "localeID": "xog",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav-cm.js
new file mode 100644
index 0000000..c880307
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ki\u025bm\u025b\u0301\u025bm",
+      "kis\u025b\u0301nd\u025b"
+    ],
+    "DAY": [
+      "s\u0254\u0301ndi\u025b",
+      "m\u00f3ndie",
+      "mu\u00e1ny\u00e1\u014bm\u00f3ndie",
+      "met\u00fakp\u00ed\u00e1p\u025b",
+      "k\u00fap\u00e9limet\u00fakpiap\u025b",
+      "fel\u00e9te",
+      "s\u00e9sel\u00e9"
+    ],
+    "ERANAMES": [
+      "katikup\u00eden Y\u00e9suse",
+      "\u00e9k\u00e9l\u00e9mk\u00fanup\u00ed\u00e9n n"
+    ],
+    "ERAS": [
+      "k.Y.",
+      "+J.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "pik\u00edt\u00edk\u00edtie, o\u00f3l\u00ed \u00fa kut\u00faan",
+      "si\u025by\u025b\u0301, o\u00f3li \u00fa k\u00e1nd\u00ed\u025b",
+      "\u0254ns\u00famb\u0254l, o\u00f3li \u00fa k\u00e1t\u00e1t\u00fa\u025b",
+      "mesi\u014b, o\u00f3li \u00fa k\u00e9nie",
+      "ensil, o\u00f3li \u00fa k\u00e1t\u00e1nu\u025b",
+      "\u0254s\u0254n",
+      "efute",
+      "pisuy\u00fa",
+      "im\u025b\u014b i pu\u0254s",
+      "im\u025b\u014b i put\u00fak,o\u00f3li \u00fa k\u00e1t\u00ed\u025b",
+      "makandik\u025b",
+      "pil\u0254nd\u0254\u0301"
+    ],
+    "SHORTDAY": [
+      "sd",
+      "md",
+      "mw",
+      "et",
+      "kl",
+      "fl",
+      "ss"
+    ],
+    "SHORTMONTH": [
+      "o.1",
+      "o.2",
+      "o.3",
+      "o.4",
+      "o.5",
+      "o.6",
+      "o.7",
+      "o.8",
+      "o.9",
+      "o.10",
+      "o.11",
+      "o.12"
+    ],
+    "STANDALONEMONTH": [
+      "pik\u00edt\u00edk\u00edtie, o\u00f3l\u00ed \u00fa kut\u00faan",
+      "si\u025by\u025b\u0301, o\u00f3li \u00fa k\u00e1nd\u00ed\u025b",
+      "\u0254ns\u00famb\u0254l, o\u00f3li \u00fa k\u00e1t\u00e1t\u00fa\u025b",
+      "mesi\u014b, o\u00f3li \u00fa k\u00e9nie",
+      "ensil, o\u00f3li \u00fa k\u00e1t\u00e1nu\u025b",
+      "\u0254s\u0254n",
+      "efute",
+      "pisuy\u00fa",
+      "im\u025b\u014b i pu\u0254s",
+      "im\u025b\u014b i put\u00fak,o\u00f3li \u00fa k\u00e1t\u00ed\u025b",
+      "makandik\u025b",
+      "pil\u0254nd\u0254\u0301"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "yav-cm",
+  "localeID": "yav_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav.js
new file mode 100644
index 0000000..77ba2f0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yav.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ki\u025bm\u025b\u0301\u025bm",
+      "kis\u025b\u0301nd\u025b"
+    ],
+    "DAY": [
+      "s\u0254\u0301ndi\u025b",
+      "m\u00f3ndie",
+      "mu\u00e1ny\u00e1\u014bm\u00f3ndie",
+      "met\u00fakp\u00ed\u00e1p\u025b",
+      "k\u00fap\u00e9limet\u00fakpiap\u025b",
+      "fel\u00e9te",
+      "s\u00e9sel\u00e9"
+    ],
+    "ERANAMES": [
+      "katikup\u00eden Y\u00e9suse",
+      "\u00e9k\u00e9l\u00e9mk\u00fanup\u00ed\u00e9n n"
+    ],
+    "ERAS": [
+      "k.Y.",
+      "+J.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "pik\u00edt\u00edk\u00edtie, o\u00f3l\u00ed \u00fa kut\u00faan",
+      "si\u025by\u025b\u0301, o\u00f3li \u00fa k\u00e1nd\u00ed\u025b",
+      "\u0254ns\u00famb\u0254l, o\u00f3li \u00fa k\u00e1t\u00e1t\u00fa\u025b",
+      "mesi\u014b, o\u00f3li \u00fa k\u00e9nie",
+      "ensil, o\u00f3li \u00fa k\u00e1t\u00e1nu\u025b",
+      "\u0254s\u0254n",
+      "efute",
+      "pisuy\u00fa",
+      "im\u025b\u014b i pu\u0254s",
+      "im\u025b\u014b i put\u00fak,o\u00f3li \u00fa k\u00e1t\u00ed\u025b",
+      "makandik\u025b",
+      "pil\u0254nd\u0254\u0301"
+    ],
+    "SHORTDAY": [
+      "sd",
+      "md",
+      "mw",
+      "et",
+      "kl",
+      "fl",
+      "ss"
+    ],
+    "SHORTMONTH": [
+      "o.1",
+      "o.2",
+      "o.3",
+      "o.4",
+      "o.5",
+      "o.6",
+      "o.7",
+      "o.8",
+      "o.9",
+      "o.10",
+      "o.11",
+      "o.12"
+    ],
+    "STANDALONEMONTH": [
+      "pik\u00edt\u00edk\u00edtie, o\u00f3l\u00ed \u00fa kut\u00faan",
+      "si\u025by\u025b\u0301, o\u00f3li \u00fa k\u00e1nd\u00ed\u025b",
+      "\u0254ns\u00famb\u0254l, o\u00f3li \u00fa k\u00e1t\u00e1t\u00fa\u025b",
+      "mesi\u014b, o\u00f3li \u00fa k\u00e9nie",
+      "ensil, o\u00f3li \u00fa k\u00e1t\u00e1nu\u025b",
+      "\u0254s\u0254n",
+      "efute",
+      "pisuy\u00fa",
+      "im\u025b\u014b i pu\u0254s",
+      "im\u025b\u014b i put\u00fak,o\u00f3li \u00fa k\u00e1t\u00ed\u025b",
+      "makandik\u025b",
+      "pil\u0254nd\u0254\u0301"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "yav",
+  "localeID": "yav",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi-001.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi-001.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi-001.js
new file mode 100644
index 0000000..8698143
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi-001.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u05e4\u05d0\u05e8\u05de\u05d9\u05d8\u05d0\u05d2",
+      "\u05e0\u05d0\u05db\u05de\u05d9\u05d8\u05d0\u05d2"
+    ],
+    "DAY": [
+      "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7",
+      "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7",
+      "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7",
+      "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da",
+      "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7",
+      "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7",
+      "\u05e9\u05d1\u05ea"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8",
+      "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8",
+      "\u05de\u05e2\u05e8\u05e5",
+      "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc",
+      "\u05de\u05d9\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8",
+      "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8"
+    ],
+    "SHORTDAY": [
+      "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7",
+      "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7",
+      "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7",
+      "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da",
+      "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7",
+      "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7",
+      "\u05e9\u05d1\u05ea"
+    ],
+    "SHORTMONTH": [
+      "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8",
+      "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8",
+      "\u05de\u05e2\u05e8\u05e5",
+      "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc",
+      "\u05de\u05d9\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8",
+      "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8"
+    ],
+    "STANDALONEMONTH": [
+      "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8",
+      "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8",
+      "\u05de\u05e2\u05e8\u05e5",
+      "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc",
+      "\u05de\u05d9\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8",
+      "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d\u05d8\u05df MMMM y",
+    "longDate": "d\u05d8\u05df MMMM y",
+    "medium": "d\u05d8\u05df MMM y HH:mm:ss",
+    "mediumDate": "d\u05d8\u05df MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "yi-001",
+  "localeID": "yi_001",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi.js
new file mode 100644
index 0000000..8f3e282
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u05e4\u05d0\u05e8\u05de\u05d9\u05d8\u05d0\u05d2",
+      "\u05e0\u05d0\u05db\u05de\u05d9\u05d8\u05d0\u05d2"
+    ],
+    "DAY": [
+      "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7",
+      "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7",
+      "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7",
+      "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da",
+      "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7",
+      "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7",
+      "\u05e9\u05d1\u05ea"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8",
+      "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8",
+      "\u05de\u05e2\u05e8\u05e5",
+      "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc",
+      "\u05de\u05d9\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8",
+      "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8"
+    ],
+    "SHORTDAY": [
+      "\u05d6\u05d5\u05e0\u05d8\u05d9\u05e7",
+      "\u05de\u05d0\u05b8\u05e0\u05d8\u05d9\u05e7",
+      "\u05d3\u05d9\u05e0\u05e1\u05d8\u05d9\u05e7",
+      "\u05de\u05d9\u05d8\u05d5\u05d5\u05d0\u05da",
+      "\u05d3\u05d0\u05e0\u05e2\u05e8\u05e9\u05d8\u05d9\u05e7",
+      "\u05e4\u05bf\u05e8\u05f2\u05b7\u05d8\u05d9\u05e7",
+      "\u05e9\u05d1\u05ea"
+    ],
+    "SHORTMONTH": [
+      "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8",
+      "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8",
+      "\u05de\u05e2\u05e8\u05e5",
+      "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc",
+      "\u05de\u05d9\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8",
+      "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8"
+    ],
+    "STANDALONEMONTH": [
+      "\u05d9\u05d0\u05b7\u05e0\u05d5\u05d0\u05b7\u05e8",
+      "\u05e4\u05bf\u05e2\u05d1\u05e8\u05d5\u05d0\u05b7\u05e8",
+      "\u05de\u05e2\u05e8\u05e5",
+      "\u05d0\u05b7\u05e4\u05bc\u05e8\u05d9\u05dc",
+      "\u05de\u05d9\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d9\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e2\u05e4\u05bc\u05d8\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d0\u05e7\u05d8\u05d0\u05d1\u05e2\u05e8",
+      "\u05e0\u05d0\u05d5\u05d5\u05e2\u05de\u05d1\u05e2\u05e8",
+      "\u05d3\u05e2\u05e6\u05e2\u05de\u05d1\u05e2\u05e8"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d\u05d8\u05df MMMM y",
+    "longDate": "d\u05d8\u05df MMMM y",
+    "medium": "d\u05d8\u05df MMM y HH:mm:ss",
+    "mediumDate": "d\u05d8\u05df MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "yi",
+  "localeID": "yi",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-bj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-bj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-bj.js
new file mode 100644
index 0000000..a3fa227
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-bj.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u00c0\u00e1r\u0254\u0300",
+      "\u0186\u0300s\u00e1n"
+    ],
+    "DAY": [
+      "\u0186j\u0254\u0301 \u00c0\u00eck\u00fa",
+      "\u0186j\u0254\u0301 Aj\u00e9",
+      "\u0186j\u0254\u0301 \u00ccs\u025b\u0301gun",
+      "\u0186j\u0254\u0301r\u00fa",
+      "\u0186j\u0254\u0301b\u0254",
+      "\u0186j\u0254\u0301 \u0190t\u00ec",
+      "\u0186j\u0254\u0301 \u00c0b\u00e1m\u025b\u0301ta"
+    ],
+    "ERANAMES": [
+      "Saju Kristi",
+      "Lehin Kristi"
+    ],
+    "ERAS": [
+      "SK",
+      "LK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Osh\u00f9 Sh\u025b\u0301r\u025b\u0301",
+      "Osh\u00f9 \u00c8r\u00e8l\u00e8",
+      "Osh\u00f9 \u0190r\u025b\u0300n\u00e0",
+      "Osh\u00f9 \u00ccgb\u00e9",
+      "Osh\u00f9 \u0190\u0300bibi",
+      "Osh\u00f9 \u00d2k\u00fadu",
+      "Osh\u00f9 Ag\u025bm\u0254",
+      "Osh\u00f9 \u00d2g\u00fan",
+      "Osh\u00f9 Owewe",
+      "Osh\u00f9 \u0186\u0300w\u00e0r\u00e0",
+      "Osh\u00f9 B\u00e9l\u00fa",
+      "Osh\u00f9 \u0186\u0300p\u025b\u0300"
+    ],
+    "SHORTDAY": [
+      "\u00c0\u00eck\u00fa",
+      "Aj\u00e9",
+      "\u00ccs\u025b\u0301gun",
+      "\u0186j\u0254\u0301r\u00fa",
+      "\u0186j\u0254\u0301b\u0254",
+      "\u0190t\u00ec",
+      "\u00c0b\u00e1m\u025b\u0301ta"
+    ],
+    "SHORTMONTH": [
+      "Sh\u025b\u0301r\u025b\u0301",
+      "\u00c8r\u00e8l\u00e8",
+      "\u0190r\u025b\u0300n\u00e0",
+      "\u00ccgb\u00e9",
+      "\u0190\u0300bibi",
+      "\u00d2k\u00fadu",
+      "Ag\u025bm\u0254",
+      "\u00d2g\u00fan",
+      "Owewe",
+      "\u0186\u0300w\u00e0r\u00e0",
+      "B\u00e9l\u00fa",
+      "\u0186\u0300p\u025b\u0300"
+    ],
+    "STANDALONEMONTH": [
+      "Osh\u00f9 Sh\u025b\u0301r\u025b\u0301",
+      "Osh\u00f9 \u00c8r\u00e8l\u00e8",
+      "Osh\u00f9 \u0190r\u025b\u0300n\u00e0",
+      "Osh\u00f9 \u00ccgb\u00e9",
+      "Osh\u00f9 \u0190\u0300bibi",
+      "Osh\u00f9 \u00d2k\u00fadu",
+      "Osh\u00f9 Ag\u025bm\u0254",
+      "Osh\u00f9 \u00d2g\u00fan",
+      "Osh\u00f9 Owewe",
+      "Osh\u00f9 \u0186\u0300w\u00e0r\u00e0",
+      "Osh\u00f9 B\u00e9l\u00fa",
+      "Osh\u00f9 \u0186\u0300p\u025b\u0300"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "yo-bj",
+  "localeID": "yo_BJ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-ng.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-ng.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-ng.js
new file mode 100644
index 0000000..6af884e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo-ng.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u00c0\u00e1r\u1ecd\u0300",
+      "\u1ecc\u0300s\u00e1n"
+    ],
+    "DAY": [
+      "\u1eccj\u1ecd\u0301 \u00c0\u00eck\u00fa",
+      "\u1eccj\u1ecd\u0301 Aj\u00e9",
+      "\u1eccj\u1ecd\u0301 \u00ccs\u1eb9\u0301gun",
+      "\u1eccj\u1ecd\u0301r\u00fa",
+      "\u1eccj\u1ecd\u0301b\u1ecd",
+      "\u1eccj\u1ecd\u0301 \u1eb8t\u00ec",
+      "\u1eccj\u1ecd\u0301 \u00c0b\u00e1m\u1eb9\u0301ta"
+    ],
+    "ERANAMES": [
+      "Saju Kristi",
+      "Lehin Kristi"
+    ],
+    "ERAS": [
+      "SK",
+      "LK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "O\u1e63\u00f9 \u1e62\u1eb9\u0301r\u1eb9\u0301",
+      "O\u1e63\u00f9 \u00c8r\u00e8l\u00e8",
+      "O\u1e63\u00f9 \u1eb8r\u1eb9\u0300n\u00e0",
+      "O\u1e63\u00f9 \u00ccgb\u00e9",
+      "O\u1e63\u00f9 \u1eb8\u0300bibi",
+      "O\u1e63\u00f9 \u00d2k\u00fadu",
+      "O\u1e63\u00f9 Ag\u1eb9m\u1ecd",
+      "O\u1e63\u00f9 \u00d2g\u00fan",
+      "O\u1e63\u00f9 Owewe",
+      "O\u1e63\u00f9 \u1ecc\u0300w\u00e0r\u00e0",
+      "O\u1e63\u00f9 B\u00e9l\u00fa",
+      "O\u1e63\u00f9 \u1ecc\u0300p\u1eb9\u0300"
+    ],
+    "SHORTDAY": [
+      "\u00c0\u00eck\u00fa",
+      "Aj\u00e9",
+      "\u00ccs\u1eb9\u0301gun",
+      "\u1eccj\u1ecd\u0301r\u00fa",
+      "\u1eccj\u1ecd\u0301b\u1ecd",
+      "\u1eb8t\u00ec",
+      "\u00c0b\u00e1m\u1eb9\u0301ta"
+    ],
+    "SHORTMONTH": [
+      "\u1e62\u1eb9\u0301r\u1eb9\u0301",
+      "\u00c8r\u00e8l\u00e8",
+      "\u1eb8r\u1eb9\u0300n\u00e0",
+      "\u00ccgb\u00e9",
+      "\u1eb8\u0300bibi",
+      "\u00d2k\u00fadu",
+      "Ag\u1eb9m\u1ecd",
+      "\u00d2g\u00fan",
+      "Owewe",
+      "\u1ecc\u0300w\u00e0r\u00e0",
+      "B\u00e9l\u00fa",
+      "\u1ecc\u0300p\u1eb9\u0300"
+    ],
+    "STANDALONEMONTH": [
+      "O\u1e63\u00f9 \u1e62\u1eb9\u0301r\u1eb9\u0301",
+      "O\u1e63\u00f9 \u00c8r\u00e8l\u00e8",
+      "O\u1e63\u00f9 \u1eb8r\u1eb9\u0300n\u00e0",
+      "O\u1e63\u00f9 \u00ccgb\u00e9",
+      "O\u1e63\u00f9 \u1eb8\u0300bibi",
+      "O\u1e63\u00f9 \u00d2k\u00fadu",
+      "O\u1e63\u00f9 Ag\u1eb9m\u1ecd",
+      "O\u1e63\u00f9 \u00d2g\u00fan",
+      "O\u1e63\u00f9 Owewe",
+      "O\u1e63\u00f9 \u1ecc\u0300w\u00e0r\u00e0",
+      "O\u1e63\u00f9 B\u00e9l\u00fa",
+      "O\u1e63\u00f9 \u1ecc\u0300p\u1eb9\u0300"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "yo-ng",
+  "localeID": "yo_NG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo.js
new file mode 100644
index 0000000..02fe549
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_yo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u00c0\u00e1r\u1ecd\u0300",
+      "\u1ecc\u0300s\u00e1n"
+    ],
+    "DAY": [
+      "\u1eccj\u1ecd\u0301 \u00c0\u00eck\u00fa",
+      "\u1eccj\u1ecd\u0301 Aj\u00e9",
+      "\u1eccj\u1ecd\u0301 \u00ccs\u1eb9\u0301gun",
+      "\u1eccj\u1ecd\u0301r\u00fa",
+      "\u1eccj\u1ecd\u0301b\u1ecd",
+      "\u1eccj\u1ecd\u0301 \u1eb8t\u00ec",
+      "\u1eccj\u1ecd\u0301 \u00c0b\u00e1m\u1eb9\u0301ta"
+    ],
+    "ERANAMES": [
+      "Saju Kristi",
+      "Lehin Kristi"
+    ],
+    "ERAS": [
+      "SK",
+      "LK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "O\u1e63\u00f9 \u1e62\u1eb9\u0301r\u1eb9\u0301",
+      "O\u1e63\u00f9 \u00c8r\u00e8l\u00e8",
+      "O\u1e63\u00f9 \u1eb8r\u1eb9\u0300n\u00e0",
+      "O\u1e63\u00f9 \u00ccgb\u00e9",
+      "O\u1e63\u00f9 \u1eb8\u0300bibi",
+      "O\u1e63\u00f9 \u00d2k\u00fadu",
+      "O\u1e63\u00f9 Ag\u1eb9m\u1ecd",
+      "O\u1e63\u00f9 \u00d2g\u00fan",
+      "O\u1e63\u00f9 Owewe",
+      "O\u1e63\u00f9 \u1ecc\u0300w\u00e0r\u00e0",
+      "O\u1e63\u00f9 B\u00e9l\u00fa",
+      "O\u1e63\u00f9 \u1ecc\u0300p\u1eb9\u0300"
+    ],
+    "SHORTDAY": [
+      "\u00c0\u00eck\u00fa",
+      "Aj\u00e9",
+      "\u00ccs\u1eb9\u0301gun",
+      "\u1eccj\u1ecd\u0301r\u00fa",
+      "\u1eccj\u1ecd\u0301b\u1ecd",
+      "\u1eb8t\u00ec",
+      "\u00c0b\u00e1m\u1eb9\u0301ta"
+    ],
+    "SHORTMONTH": [
+      "\u1e62\u1eb9\u0301r\u1eb9\u0301",
+      "\u00c8r\u00e8l\u00e8",
+      "\u1eb8r\u1eb9\u0300n\u00e0",
+      "\u00ccgb\u00e9",
+      "\u1eb8\u0300bibi",
+      "\u00d2k\u00fadu",
+      "Ag\u1eb9m\u1ecd",
+      "\u00d2g\u00fan",
+      "Owewe",
+      "\u1ecc\u0300w\u00e0r\u00e0",
+      "B\u00e9l\u00fa",
+      "\u1ecc\u0300p\u1eb9\u0300"
+    ],
+    "STANDALONEMONTH": [
+      "O\u1e63\u00f9 \u1e62\u1eb9\u0301r\u1eb9\u0301",
+      "O\u1e63\u00f9 \u00c8r\u00e8l\u00e8",
+      "O\u1e63\u00f9 \u1eb8r\u1eb9\u0300n\u00e0",
+      "O\u1e63\u00f9 \u00ccgb\u00e9",
+      "O\u1e63\u00f9 \u1eb8\u0300bibi",
+      "O\u1e63\u00f9 \u00d2k\u00fadu",
+      "O\u1e63\u00f9 Ag\u1eb9m\u1ecd",
+      "O\u1e63\u00f9 \u00d2g\u00fan",
+      "O\u1e63\u00f9 Owewe",
+      "O\u1e63\u00f9 \u1ecc\u0300w\u00e0r\u00e0",
+      "O\u1e63\u00f9 B\u00e9l\u00fa",
+      "O\u1e63\u00f9 \u1ecc\u0300p\u1eb9\u0300"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "yo",
+  "localeID": "yo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[15/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cd.js
new file mode 100644
index 0000000..d46aa94
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cd.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "nt\u0254\u0301ng\u0254\u0301",
+      "mp\u00f3kwa"
+    ],
+    "DAY": [
+      "eyenga",
+      "mok\u0254l\u0254 mwa yambo",
+      "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
+      "mok\u0254l\u0254 mwa m\u00eds\u00e1to",
+      "mok\u0254l\u0254 ya m\u00edn\u00e9i",
+      "mok\u0254l\u0254 ya m\u00edt\u00e1no",
+      "mp\u0254\u0301s\u0254"
+    ],
+    "ERANAMES": [
+      "Yambo ya Y\u00e9zu Kr\u00eds",
+      "Nsima ya Y\u00e9zu Kr\u00eds"
+    ],
+    "ERAS": [
+      "lib\u00f3so ya",
+      "nsima ya Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "SHORTDAY": [
+      "eye",
+      "ybo",
+      "mbl",
+      "mst",
+      "min",
+      "mtn",
+      "mps"
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fbl",
+      "msi",
+      "apl",
+      "mai",
+      "yun",
+      "yul",
+      "agt",
+      "stb",
+      "\u0254tb",
+      "nvb",
+      "dsb"
+    ],
+    "STANDALONEMONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ln-cd",
+  "localeID": "ln_CD",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cf.js
new file mode 100644
index 0000000..8a2d999
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cf.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "nt\u0254\u0301ng\u0254\u0301",
+      "mp\u00f3kwa"
+    ],
+    "DAY": [
+      "eyenga",
+      "mok\u0254l\u0254 mwa yambo",
+      "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
+      "mok\u0254l\u0254 mwa m\u00eds\u00e1to",
+      "mok\u0254l\u0254 ya m\u00edn\u00e9i",
+      "mok\u0254l\u0254 ya m\u00edt\u00e1no",
+      "mp\u0254\u0301s\u0254"
+    ],
+    "ERANAMES": [
+      "Yambo ya Y\u00e9zu Kr\u00eds",
+      "Nsima ya Y\u00e9zu Kr\u00eds"
+    ],
+    "ERAS": [
+      "lib\u00f3so ya",
+      "nsima ya Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "SHORTDAY": [
+      "eye",
+      "ybo",
+      "mbl",
+      "mst",
+      "min",
+      "mtn",
+      "mps"
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fbl",
+      "msi",
+      "apl",
+      "mai",
+      "yun",
+      "yul",
+      "agt",
+      "stb",
+      "\u0254tb",
+      "nvb",
+      "dsb"
+    ],
+    "STANDALONEMONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ln-cf",
+  "localeID": "ln_CF",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cg.js
new file mode 100644
index 0000000..fd47f4a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-cg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "nt\u0254\u0301ng\u0254\u0301",
+      "mp\u00f3kwa"
+    ],
+    "DAY": [
+      "eyenga",
+      "mok\u0254l\u0254 mwa yambo",
+      "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
+      "mok\u0254l\u0254 mwa m\u00eds\u00e1to",
+      "mok\u0254l\u0254 ya m\u00edn\u00e9i",
+      "mok\u0254l\u0254 ya m\u00edt\u00e1no",
+      "mp\u0254\u0301s\u0254"
+    ],
+    "ERANAMES": [
+      "Yambo ya Y\u00e9zu Kr\u00eds",
+      "Nsima ya Y\u00e9zu Kr\u00eds"
+    ],
+    "ERAS": [
+      "lib\u00f3so ya",
+      "nsima ya Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "SHORTDAY": [
+      "eye",
+      "ybo",
+      "mbl",
+      "mst",
+      "min",
+      "mtn",
+      "mps"
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fbl",
+      "msi",
+      "apl",
+      "mai",
+      "yun",
+      "yul",
+      "agt",
+      "stb",
+      "\u0254tb",
+      "nvb",
+      "dsb"
+    ],
+    "STANDALONEMONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ln-cg",
+  "localeID": "ln_CG",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln.js
new file mode 100644
index 0000000..63ad366
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "nt\u0254\u0301ng\u0254\u0301",
+      "mp\u00f3kwa"
+    ],
+    "DAY": [
+      "eyenga",
+      "mok\u0254l\u0254 mwa yambo",
+      "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
+      "mok\u0254l\u0254 mwa m\u00eds\u00e1to",
+      "mok\u0254l\u0254 ya m\u00edn\u00e9i",
+      "mok\u0254l\u0254 ya m\u00edt\u00e1no",
+      "mp\u0254\u0301s\u0254"
+    ],
+    "ERANAMES": [
+      "Yambo ya Y\u00e9zu Kr\u00eds",
+      "Nsima ya Y\u00e9zu Kr\u00eds"
+    ],
+    "ERAS": [
+      "lib\u00f3so ya",
+      "nsima ya Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "SHORTDAY": [
+      "eye",
+      "ybo",
+      "mbl",
+      "mst",
+      "min",
+      "mtn",
+      "mps"
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fbl",
+      "msi",
+      "apl",
+      "mai",
+      "yun",
+      "yul",
+      "agt",
+      "stb",
+      "\u0254tb",
+      "nvb",
+      "dsb"
+    ],
+    "STANDALONEMONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ln",
+  "localeID": "ln",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo-la.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo-la.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo-la.js
new file mode 100644
index 0000000..1709269
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo-la.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0e81\u0ec8\u0ead\u0e99\u0e97\u0ec8\u0ebd\u0e87",
+      "\u0eab\u0ebc\u0eb1\u0e87\u0e97\u0ec8\u0ebd\u0e87"
+    ],
+    "DAY": [
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81",
+      "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2"
+    ],
+    "ERANAMES": [
+      "\u0e81\u0ec8\u0ead\u0e99\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94",
+      "\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94"
+    ],
+    "ERAS": [
+      "\u0e81\u0ec8\u0ead\u0e99 \u0e84.\u0eaa.",
+      "\u0e84.\u0eaa."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99",
+      "\u0e81\u0eb8\u0ea1\u0e9e\u0eb2",
+      "\u0ea1\u0eb5\u0e99\u0eb2",
+      "\u0ec0\u0ea1\u0eaa\u0eb2",
+      "\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2",
+      "\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2",
+      "\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94",
+      "\u0eaa\u0eb4\u0e87\u0eab\u0eb2",
+      "\u0e81\u0eb1\u0e99\u0e8d\u0eb2",
+      "\u0e95\u0eb8\u0ea5\u0eb2",
+      "\u0e9e\u0eb0\u0e88\u0eb4\u0e81",
+      "\u0e97\u0eb1\u0e99\u0ea7\u0eb2"
+    ],
+    "SHORTDAY": [
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81",
+      "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2"
+    ],
+    "SHORTMONTH": [
+      "\u0ea1.\u0e81.",
+      "\u0e81.\u0e9e.",
+      "\u0ea1.\u0e99.",
+      "\u0ea1.\u0eaa.",
+      "\u0e9e.\u0e9e.",
+      "\u0ea1\u0eb4.\u0e96.",
+      "\u0e81.\u0ea5.",
+      "\u0eaa.\u0eab.",
+      "\u0e81.\u0e8d.",
+      "\u0e95.\u0ea5.",
+      "\u0e9e.\u0e88.",
+      "\u0e97.\u0ea7."
+    ],
+    "STANDALONEMONTH": [
+      "\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99",
+      "\u0e81\u0eb8\u0ea1\u0e9e\u0eb2",
+      "\u0ea1\u0eb5\u0e99\u0eb2",
+      "\u0ec0\u0ea1\u0eaa\u0eb2",
+      "\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2",
+      "\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2",
+      "\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94",
+      "\u0eaa\u0eb4\u0e87\u0eab\u0eb2",
+      "\u0e81\u0eb1\u0e99\u0e8d\u0eb2",
+      "\u0e95\u0eb8\u0ea5\u0eb2",
+      "\u0e9e\u0eb0\u0e88\u0eb4\u0e81",
+      "\u0e97\u0eb1\u0e99\u0ea7\u0eb2"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE \u0e97\u0eb5 d MMMM G y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/y H:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ad",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lo-la",
+  "localeID": "lo_LA",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo.js
new file mode 100644
index 0000000..9d27393
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lo.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0e81\u0ec8\u0ead\u0e99\u0e97\u0ec8\u0ebd\u0e87",
+      "\u0eab\u0ebc\u0eb1\u0e87\u0e97\u0ec8\u0ebd\u0e87"
+    ],
+    "DAY": [
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81",
+      "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2"
+    ],
+    "ERANAMES": [
+      "\u0e81\u0ec8\u0ead\u0e99\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94",
+      "\u0e84\u0ea3\u0eb4\u0e94\u0eaa\u0eb1\u0e81\u0e81\u0eb0\u0ea5\u0eb2\u0e94"
+    ],
+    "ERAS": [
+      "\u0e81\u0ec8\u0ead\u0e99 \u0e84.\u0eaa.",
+      "\u0e84.\u0eaa."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99",
+      "\u0e81\u0eb8\u0ea1\u0e9e\u0eb2",
+      "\u0ea1\u0eb5\u0e99\u0eb2",
+      "\u0ec0\u0ea1\u0eaa\u0eb2",
+      "\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2",
+      "\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2",
+      "\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94",
+      "\u0eaa\u0eb4\u0e87\u0eab\u0eb2",
+      "\u0e81\u0eb1\u0e99\u0e8d\u0eb2",
+      "\u0e95\u0eb8\u0ea5\u0eb2",
+      "\u0e9e\u0eb0\u0e88\u0eb4\u0e81",
+      "\u0e97\u0eb1\u0e99\u0ea7\u0eb2"
+    ],
+    "SHORTDAY": [
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94",
+      "\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81",
+      "\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2"
+    ],
+    "SHORTMONTH": [
+      "\u0ea1.\u0e81.",
+      "\u0e81.\u0e9e.",
+      "\u0ea1.\u0e99.",
+      "\u0ea1.\u0eaa.",
+      "\u0e9e.\u0e9e.",
+      "\u0ea1\u0eb4.\u0e96.",
+      "\u0e81.\u0ea5.",
+      "\u0eaa.\u0eab.",
+      "\u0e81.\u0e8d.",
+      "\u0e95.\u0ea5.",
+      "\u0e9e.\u0e88.",
+      "\u0e97.\u0ea7."
+    ],
+    "STANDALONEMONTH": [
+      "\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99",
+      "\u0e81\u0eb8\u0ea1\u0e9e\u0eb2",
+      "\u0ea1\u0eb5\u0e99\u0eb2",
+      "\u0ec0\u0ea1\u0eaa\u0eb2",
+      "\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2",
+      "\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2",
+      "\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94",
+      "\u0eaa\u0eb4\u0e87\u0eab\u0eb2",
+      "\u0e81\u0eb1\u0e99\u0e8d\u0eb2",
+      "\u0e95\u0eb8\u0ea5\u0eb2",
+      "\u0e9e\u0eb0\u0e88\u0eb4\u0e81",
+      "\u0e97\u0eb1\u0e99\u0ea7\u0eb2"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE \u0e97\u0eb5 d MMMM G y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/y H:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ad",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lo",
+  "localeID": "lo",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt-lt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt-lt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt-lt.js
new file mode 100644
index 0000000..cd4d0e9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt-lt.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "prie\u0161piet",
+      "popiet"
+    ],
+    "DAY": [
+      "sekmadienis",
+      "pirmadienis",
+      "antradienis",
+      "tre\u010diadienis",
+      "ketvirtadienis",
+      "penktadienis",
+      "\u0161e\u0161tadienis"
+    ],
+    "ERANAMES": [
+      "prie\u0161 Krist\u0173",
+      "po Kristaus"
+    ],
+    "ERAS": [
+      "pr. Kr.",
+      "po Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "sausio",
+      "vasario",
+      "kovo",
+      "baland\u017eio",
+      "gegu\u017e\u0117s",
+      "bir\u017eelio",
+      "liepos",
+      "rugpj\u016b\u010dio",
+      "rugs\u0117jo",
+      "spalio",
+      "lapkri\u010dio",
+      "gruod\u017eio"
+    ],
+    "SHORTDAY": [
+      "sk",
+      "pr",
+      "an",
+      "tr",
+      "kt",
+      "pn",
+      "\u0161t"
+    ],
+    "SHORTMONTH": [
+      "saus.",
+      "vas.",
+      "kov.",
+      "bal.",
+      "geg.",
+      "bir\u017e.",
+      "liep.",
+      "rugp.",
+      "rugs.",
+      "spal.",
+      "lapkr.",
+      "gruod."
+    ],
+    "STANDALONEMONTH": [
+      "sausis",
+      "vasaris",
+      "kovas",
+      "balandis",
+      "gegu\u017e\u0117",
+      "bir\u017eelis",
+      "liepa",
+      "rugpj\u016btis",
+      "rugs\u0117jis",
+      "spalis",
+      "lapkritis",
+      "gruodis"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y 'm'. MMMM d 'd'., EEEE",
+    "longDate": "y 'm'. MMMM d 'd'.",
+    "medium": "y-MM-dd HH:mm:ss",
+    "mediumDate": "y-MM-dd",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "lt-lt",
+  "localeID": "lt_LT",
+  "pluralCat": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.f != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt.js
new file mode 100644
index 0000000..24cb315
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lt.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "prie\u0161piet",
+      "popiet"
+    ],
+    "DAY": [
+      "sekmadienis",
+      "pirmadienis",
+      "antradienis",
+      "tre\u010diadienis",
+      "ketvirtadienis",
+      "penktadienis",
+      "\u0161e\u0161tadienis"
+    ],
+    "ERANAMES": [
+      "prie\u0161 Krist\u0173",
+      "po Kristaus"
+    ],
+    "ERAS": [
+      "pr. Kr.",
+      "po Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "sausio",
+      "vasario",
+      "kovo",
+      "baland\u017eio",
+      "gegu\u017e\u0117s",
+      "bir\u017eelio",
+      "liepos",
+      "rugpj\u016b\u010dio",
+      "rugs\u0117jo",
+      "spalio",
+      "lapkri\u010dio",
+      "gruod\u017eio"
+    ],
+    "SHORTDAY": [
+      "sk",
+      "pr",
+      "an",
+      "tr",
+      "kt",
+      "pn",
+      "\u0161t"
+    ],
+    "SHORTMONTH": [
+      "saus.",
+      "vas.",
+      "kov.",
+      "bal.",
+      "geg.",
+      "bir\u017e.",
+      "liep.",
+      "rugp.",
+      "rugs.",
+      "spal.",
+      "lapkr.",
+      "gruod."
+    ],
+    "STANDALONEMONTH": [
+      "sausis",
+      "vasaris",
+      "kovas",
+      "balandis",
+      "gegu\u017e\u0117",
+      "bir\u017eelis",
+      "liepa",
+      "rugpj\u016btis",
+      "rugs\u0117jis",
+      "spalis",
+      "lapkritis",
+      "gruodis"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y 'm'. MMMM d 'd'., EEEE",
+    "longDate": "y 'm'. MMMM d 'd'.",
+    "medium": "y-MM-dd HH:mm:ss",
+    "mediumDate": "y-MM-dd",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "lt",
+  "localeID": "lt",
+  "pluralCat": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.f != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu-cd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu-cd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu-cd.js
new file mode 100644
index 0000000..a274e9d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu-cd.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Dinda",
+      "Dilolo"
+    ],
+    "DAY": [
+      "Lumingu",
+      "Nkodya",
+      "Nd\u00e0ay\u00e0",
+      "Ndang\u00f9",
+      "Nj\u00f2wa",
+      "Ng\u00f2vya",
+      "Lubingu"
+    ],
+    "ERANAMES": [
+      "Kumpala kwa Yezu Kli",
+      "Kunyima kwa Yezu Kli"
+    ],
+    "ERAS": [
+      "kmp. Y.K.",
+      "kny. Y. K."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ciongo",
+      "L\u00f9ishi",
+      "Lus\u00f2lo",
+      "M\u00f9uy\u00e0",
+      "Lum\u00f9ng\u00f9l\u00f9",
+      "Lufuimi",
+      "Kab\u00e0l\u00e0sh\u00ecp\u00f9",
+      "L\u00f9sh\u00eck\u00e0",
+      "Lutongolo",
+      "Lung\u00f9di",
+      "Kasw\u00e8k\u00e8s\u00e8",
+      "Cisw\u00e0"
+    ],
+    "SHORTDAY": [
+      "Lum",
+      "Nko",
+      "Ndy",
+      "Ndg",
+      "Njw",
+      "Ngv",
+      "Lub"
+    ],
+    "SHORTMONTH": [
+      "Cio",
+      "Lui",
+      "Lus",
+      "Muu",
+      "Lum",
+      "Luf",
+      "Kab",
+      "Lush",
+      "Lut",
+      "Lun",
+      "Kas",
+      "Cis"
+    ],
+    "STANDALONEMONTH": [
+      "Ciongo",
+      "L\u00f9ishi",
+      "Lus\u00f2lo",
+      "M\u00f9uy\u00e0",
+      "Lum\u00f9ng\u00f9l\u00f9",
+      "Lufuimi",
+      "Kab\u00e0l\u00e0sh\u00ecp\u00f9",
+      "L\u00f9sh\u00eck\u00e0",
+      "Lutongolo",
+      "Lung\u00f9di",
+      "Kasw\u00e8k\u00e8s\u00e8",
+      "Cisw\u00e0"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "lu-cd",
+  "localeID": "lu_CD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu.js
new file mode 100644
index 0000000..efbfd6a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Dinda",
+      "Dilolo"
+    ],
+    "DAY": [
+      "Lumingu",
+      "Nkodya",
+      "Nd\u00e0ay\u00e0",
+      "Ndang\u00f9",
+      "Nj\u00f2wa",
+      "Ng\u00f2vya",
+      "Lubingu"
+    ],
+    "ERANAMES": [
+      "Kumpala kwa Yezu Kli",
+      "Kunyima kwa Yezu Kli"
+    ],
+    "ERAS": [
+      "kmp. Y.K.",
+      "kny. Y. K."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ciongo",
+      "L\u00f9ishi",
+      "Lus\u00f2lo",
+      "M\u00f9uy\u00e0",
+      "Lum\u00f9ng\u00f9l\u00f9",
+      "Lufuimi",
+      "Kab\u00e0l\u00e0sh\u00ecp\u00f9",
+      "L\u00f9sh\u00eck\u00e0",
+      "Lutongolo",
+      "Lung\u00f9di",
+      "Kasw\u00e8k\u00e8s\u00e8",
+      "Cisw\u00e0"
+    ],
+    "SHORTDAY": [
+      "Lum",
+      "Nko",
+      "Ndy",
+      "Ndg",
+      "Njw",
+      "Ngv",
+      "Lub"
+    ],
+    "SHORTMONTH": [
+      "Cio",
+      "Lui",
+      "Lus",
+      "Muu",
+      "Lum",
+      "Luf",
+      "Kab",
+      "Lush",
+      "Lut",
+      "Lun",
+      "Kas",
+      "Cis"
+    ],
+    "STANDALONEMONTH": [
+      "Ciongo",
+      "L\u00f9ishi",
+      "Lus\u00f2lo",
+      "M\u00f9uy\u00e0",
+      "Lum\u00f9ng\u00f9l\u00f9",
+      "Lufuimi",
+      "Kab\u00e0l\u00e0sh\u00ecp\u00f9",
+      "L\u00f9sh\u00eck\u00e0",
+      "Lutongolo",
+      "Lung\u00f9di",
+      "Kasw\u00e8k\u00e8s\u00e8",
+      "Cisw\u00e0"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "lu",
+  "localeID": "lu",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo-ke.js
new file mode 100644
index 0000000..2bb386f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "OD",
+      "OT"
+    ],
+    "DAY": [
+      "Jumapil",
+      "Wuok Tich",
+      "Tich Ariyo",
+      "Tich Adek",
+      "Tich Ang\u2019wen",
+      "Tich Abich",
+      "Ngeso"
+    ],
+    "ERANAMES": [
+      "Kapok Kristo obiro",
+      "Ka Kristo osebiro"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Dwe mar Achiel",
+      "Dwe mar Ariyo",
+      "Dwe mar Adek",
+      "Dwe mar Ang\u2019wen",
+      "Dwe mar Abich",
+      "Dwe mar Auchiel",
+      "Dwe mar Abiriyo",
+      "Dwe mar Aboro",
+      "Dwe mar Ochiko",
+      "Dwe mar Apar",
+      "Dwe mar gi achiel",
+      "Dwe mar Apar gi ariyo"
+    ],
+    "SHORTDAY": [
+      "JMP",
+      "WUT",
+      "TAR",
+      "TAD",
+      "TAN",
+      "TAB",
+      "NGS"
+    ],
+    "SHORTMONTH": [
+      "DAC",
+      "DAR",
+      "DAD",
+      "DAN",
+      "DAH",
+      "DAU",
+      "DAO",
+      "DAB",
+      "DOC",
+      "DAP",
+      "DGI",
+      "DAG"
+    ],
+    "STANDALONEMONTH": [
+      "Dwe mar Achiel",
+      "Dwe mar Ariyo",
+      "Dwe mar Adek",
+      "Dwe mar Ang\u2019wen",
+      "Dwe mar Abich",
+      "Dwe mar Auchiel",
+      "Dwe mar Abiriyo",
+      "Dwe mar Aboro",
+      "Dwe mar Ochiko",
+      "Dwe mar Apar",
+      "Dwe mar gi achiel",
+      "Dwe mar Apar gi ariyo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "luo-ke",
+  "localeID": "luo_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo.js
new file mode 100644
index 0000000..8ca950b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "OD",
+      "OT"
+    ],
+    "DAY": [
+      "Jumapil",
+      "Wuok Tich",
+      "Tich Ariyo",
+      "Tich Adek",
+      "Tich Ang\u2019wen",
+      "Tich Abich",
+      "Ngeso"
+    ],
+    "ERANAMES": [
+      "Kapok Kristo obiro",
+      "Ka Kristo osebiro"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Dwe mar Achiel",
+      "Dwe mar Ariyo",
+      "Dwe mar Adek",
+      "Dwe mar Ang\u2019wen",
+      "Dwe mar Abich",
+      "Dwe mar Auchiel",
+      "Dwe mar Abiriyo",
+      "Dwe mar Aboro",
+      "Dwe mar Ochiko",
+      "Dwe mar Apar",
+      "Dwe mar gi achiel",
+      "Dwe mar Apar gi ariyo"
+    ],
+    "SHORTDAY": [
+      "JMP",
+      "WUT",
+      "TAR",
+      "TAD",
+      "TAN",
+      "TAB",
+      "NGS"
+    ],
+    "SHORTMONTH": [
+      "DAC",
+      "DAR",
+      "DAD",
+      "DAN",
+      "DAH",
+      "DAU",
+      "DAO",
+      "DAB",
+      "DOC",
+      "DAP",
+      "DGI",
+      "DAG"
+    ],
+    "STANDALONEMONTH": [
+      "Dwe mar Achiel",
+      "Dwe mar Ariyo",
+      "Dwe mar Adek",
+      "Dwe mar Ang\u2019wen",
+      "Dwe mar Abich",
+      "Dwe mar Auchiel",
+      "Dwe mar Abiriyo",
+      "Dwe mar Aboro",
+      "Dwe mar Ochiko",
+      "Dwe mar Apar",
+      "Dwe mar gi achiel",
+      "Dwe mar Apar gi ariyo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "luo",
+  "localeID": "luo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy-ke.js
new file mode 100644
index 0000000..7747423
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Jumapiri",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Murwa wa Kanne",
+      "Murwa wa Katano",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Imberi ya Kuuza Kwa",
+      "Muhiga Kuvita Kuuza"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "J2",
+      "J3",
+      "J4",
+      "J5",
+      "Al",
+      "Ij",
+      "J1"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "luy-ke",
+  "localeID": "luy_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy.js
new file mode 100644
index 0000000..23a74ab
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_luy.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Jumapiri",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Murwa wa Kanne",
+      "Murwa wa Katano",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Imberi ya Kuuza Kwa",
+      "Muhiga Kuvita Kuuza"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "J2",
+      "J3",
+      "J4",
+      "J5",
+      "Al",
+      "Ij",
+      "J1"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "luy",
+  "localeID": "luy",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv-lv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv-lv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv-lv.js
new file mode 100644
index 0000000..55d42b4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv-lv.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "priek\u0161pusdien\u0101",
+      "p\u0113cpusdien\u0101"
+    ],
+    "DAY": [
+      "sv\u0113tdiena",
+      "pirmdiena",
+      "otrdiena",
+      "tre\u0161diena",
+      "ceturtdiena",
+      "piektdiena",
+      "sestdiena"
+    ],
+    "ERANAMES": [
+      "pirms m\u016bsu \u0113ras",
+      "m\u016bsu \u0113r\u0101"
+    ],
+    "ERAS": [
+      "p.m.\u0113.",
+      "m.\u0113."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janv\u0101ris",
+      "febru\u0101ris",
+      "marts",
+      "apr\u012blis",
+      "maijs",
+      "j\u016bnijs",
+      "j\u016blijs",
+      "augusts",
+      "septembris",
+      "oktobris",
+      "novembris",
+      "decembris"
+    ],
+    "SHORTDAY": [
+      "Sv",
+      "Pr",
+      "Ot",
+      "Tr",
+      "Ce",
+      "Pk",
+      "Se"
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "febr.",
+      "marts",
+      "apr.",
+      "maijs",
+      "j\u016bn.",
+      "j\u016bl.",
+      "aug.",
+      "sept.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Janv\u0101ris",
+      "Febru\u0101ris",
+      "Marts",
+      "Apr\u012blis",
+      "Maijs",
+      "J\u016bnijs",
+      "J\u016blijs",
+      "Augusts",
+      "Septembris",
+      "Oktobris",
+      "Novembris",
+      "Decembris"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y. 'gada' d. MMMM",
+    "longDate": "y. 'gada' d. MMMM",
+    "medium": "y. 'gada' d. MMM HH:mm:ss",
+    "mediumDate": "y. 'gada' d. MMM",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 0,
+        "lgSize": 0,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lv-lv",
+  "localeID": "lv_LV",
+  "pluralCat": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19 || vf.v == 2 && vf.f % 100 >= 11 && vf.f % 100 <= 19) {    return PLURAL_CATEGORY.ZERO;  }  if (n % 10 == 1 && n % 100 != 11 || vf.v == 2 && vf.f % 10 == 1 && vf.f % 100 != 11 || vf.v != 2 && vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv.js
new file mode 100644
index 0000000..5394baf
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lv.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "priek\u0161pusdien\u0101",
+      "p\u0113cpusdien\u0101"
+    ],
+    "DAY": [
+      "sv\u0113tdiena",
+      "pirmdiena",
+      "otrdiena",
+      "tre\u0161diena",
+      "ceturtdiena",
+      "piektdiena",
+      "sestdiena"
+    ],
+    "ERANAMES": [
+      "pirms m\u016bsu \u0113ras",
+      "m\u016bsu \u0113r\u0101"
+    ],
+    "ERAS": [
+      "p.m.\u0113.",
+      "m.\u0113."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janv\u0101ris",
+      "febru\u0101ris",
+      "marts",
+      "apr\u012blis",
+      "maijs",
+      "j\u016bnijs",
+      "j\u016blijs",
+      "augusts",
+      "septembris",
+      "oktobris",
+      "novembris",
+      "decembris"
+    ],
+    "SHORTDAY": [
+      "Sv",
+      "Pr",
+      "Ot",
+      "Tr",
+      "Ce",
+      "Pk",
+      "Se"
+    ],
+    "SHORTMONTH": [
+      "janv.",
+      "febr.",
+      "marts",
+      "apr.",
+      "maijs",
+      "j\u016bn.",
+      "j\u016bl.",
+      "aug.",
+      "sept.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Janv\u0101ris",
+      "Febru\u0101ris",
+      "Marts",
+      "Apr\u012blis",
+      "Maijs",
+      "J\u016bnijs",
+      "J\u016blijs",
+      "Augusts",
+      "Septembris",
+      "Oktobris",
+      "Novembris",
+      "Decembris"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y. 'gada' d. MMMM",
+    "longDate": "y. 'gada' d. MMMM",
+    "medium": "y. 'gada' d. MMM HH:mm:ss",
+    "mediumDate": "y. 'gada' d. MMM",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 0,
+        "lgSize": 0,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lv",
+  "localeID": "lv",
+  "pluralCat": function(n, opt_precision) {  var vf = getVF(n, opt_precision);  if (n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19 || vf.v == 2 && vf.f % 100 >= 11 && vf.f % 100 <= 19) {    return PLURAL_CATEGORY.ZERO;  }  if (n % 10 == 1 && n % 100 != 11 || vf.v == 2 && vf.f % 10 == 1 && vf.f % 100 != 11 || vf.v != 2 && vf.f % 10 == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-ke.js
new file mode 100644
index 0000000..4b5be41
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0190nkak\u025bny\u00e1",
+      "\u0190nd\u00e1m\u00e2"
+    ],
+    "DAY": [
+      "Jumap\u00edl\u00ed",
+      "Jumat\u00e1tu",
+      "Jumane",
+      "Jumat\u00e1n\u0254",
+      "Ala\u00e1misi",
+      "Jum\u00e1a",
+      "Jumam\u00f3si"
+    ],
+    "ERANAMES": [
+      "Me\u00edn\u014d Y\u025b\u0301s\u0289",
+      "E\u00edn\u014d Y\u025b\u0301s\u0289"
+    ],
+    "ERAS": [
+      "MY",
+      "EY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Oladal\u0289\u0301",
+      "Ar\u00e1t",
+      "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k",
+      "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2",
+      "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2",
+      "K\u00faj\u00fa\u0254r\u0254k",
+      "M\u00f3rus\u00e1sin",
+      "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b",
+      "K\u00fash\u00een",
+      "Olg\u00edsan",
+      "P\u0289sh\u0289\u0301ka",
+      "Nt\u0289\u0301\u014b\u0289\u0301s"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Dal",
+      "Ar\u00e1",
+      "\u0186\u025bn",
+      "Doy",
+      "L\u00e9p",
+      "Rok",
+      "S\u00e1s",
+      "B\u0254\u0301r",
+      "K\u00fas",
+      "G\u00eds",
+      "Sh\u0289\u0301",
+      "Nt\u0289\u0301"
+    ],
+    "STANDALONEMONTH": [
+      "Oladal\u0289\u0301",
+      "Ar\u00e1t",
+      "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k",
+      "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2",
+      "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2",
+      "K\u00faj\u00fa\u0254r\u0254k",
+      "M\u00f3rus\u00e1sin",
+      "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b",
+      "K\u00fash\u00een",
+      "Olg\u00edsan",
+      "P\u0289sh\u0289\u0301ka",
+      "Nt\u0289\u0301\u014b\u0289\u0301s"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mas-ke",
+  "localeID": "mas_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-tz.js
new file mode 100644
index 0000000..bf88154
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0190nkak\u025bny\u00e1",
+      "\u0190nd\u00e1m\u00e2"
+    ],
+    "DAY": [
+      "Jumap\u00edl\u00ed",
+      "Jumat\u00e1tu",
+      "Jumane",
+      "Jumat\u00e1n\u0254",
+      "Ala\u00e1misi",
+      "Jum\u00e1a",
+      "Jumam\u00f3si"
+    ],
+    "ERANAMES": [
+      "Me\u00edn\u014d Y\u025b\u0301s\u0289",
+      "E\u00edn\u014d Y\u025b\u0301s\u0289"
+    ],
+    "ERAS": [
+      "MY",
+      "EY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Oladal\u0289\u0301",
+      "Ar\u00e1t",
+      "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k",
+      "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2",
+      "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2",
+      "K\u00faj\u00fa\u0254r\u0254k",
+      "M\u00f3rus\u00e1sin",
+      "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b",
+      "K\u00fash\u00een",
+      "Olg\u00edsan",
+      "P\u0289sh\u0289\u0301ka",
+      "Nt\u0289\u0301\u014b\u0289\u0301s"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Dal",
+      "Ar\u00e1",
+      "\u0186\u025bn",
+      "Doy",
+      "L\u00e9p",
+      "Rok",
+      "S\u00e1s",
+      "B\u0254\u0301r",
+      "K\u00fas",
+      "G\u00eds",
+      "Sh\u0289\u0301",
+      "Nt\u0289\u0301"
+    ],
+    "STANDALONEMONTH": [
+      "Oladal\u0289\u0301",
+      "Ar\u00e1t",
+      "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k",
+      "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2",
+      "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2",
+      "K\u00faj\u00fa\u0254r\u0254k",
+      "M\u00f3rus\u00e1sin",
+      "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b",
+      "K\u00fash\u00een",
+      "Olg\u00edsan",
+      "P\u0289sh\u0289\u0301ka",
+      "Nt\u0289\u0301\u014b\u0289\u0301s"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mas-tz",
+  "localeID": "mas_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas.js
new file mode 100644
index 0000000..a1557f5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mas.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0190nkak\u025bny\u00e1",
+      "\u0190nd\u00e1m\u00e2"
+    ],
+    "DAY": [
+      "Jumap\u00edl\u00ed",
+      "Jumat\u00e1tu",
+      "Jumane",
+      "Jumat\u00e1n\u0254",
+      "Ala\u00e1misi",
+      "Jum\u00e1a",
+      "Jumam\u00f3si"
+    ],
+    "ERANAMES": [
+      "Me\u00edn\u014d Y\u025b\u0301s\u0289",
+      "E\u00edn\u014d Y\u025b\u0301s\u0289"
+    ],
+    "ERAS": [
+      "MY",
+      "EY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Oladal\u0289\u0301",
+      "Ar\u00e1t",
+      "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k",
+      "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2",
+      "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2",
+      "K\u00faj\u00fa\u0254r\u0254k",
+      "M\u00f3rus\u00e1sin",
+      "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b",
+      "K\u00fash\u00een",
+      "Olg\u00edsan",
+      "P\u0289sh\u0289\u0301ka",
+      "Nt\u0289\u0301\u014b\u0289\u0301s"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Dal",
+      "Ar\u00e1",
+      "\u0186\u025bn",
+      "Doy",
+      "L\u00e9p",
+      "Rok",
+      "S\u00e1s",
+      "B\u0254\u0301r",
+      "K\u00fas",
+      "G\u00eds",
+      "Sh\u0289\u0301",
+      "Nt\u0289\u0301"
+    ],
+    "STANDALONEMONTH": [
+      "Oladal\u0289\u0301",
+      "Ar\u00e1t",
+      "\u0186\u025bn\u0268\u0301\u0254\u0268\u014b\u0254k",
+      "Olodoy\u00ed\u00f3r\u00ed\u00ea ink\u00f3k\u00fa\u00e2",
+      "Oloil\u00e9p\u016bny\u012b\u0113 ink\u00f3k\u00fa\u00e2",
+      "K\u00faj\u00fa\u0254r\u0254k",
+      "M\u00f3rus\u00e1sin",
+      "\u0186l\u0254\u0301\u0268\u0301b\u0254\u0301r\u00e1r\u025b",
+      "K\u00fash\u00een",
+      "Olg\u00edsan",
+      "P\u0289sh\u0289\u0301ka",
+      "Nt\u0289\u0301\u014b\u0289\u0301s"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mas",
+  "localeID": "mas",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer-ke.js
new file mode 100644
index 0000000..a4eda25
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "R\u0168",
+      "\u0168G"
+    ],
+    "DAY": [
+      "Kiumia",
+      "Muramuko",
+      "Wairi",
+      "Wethatu",
+      "Wena",
+      "Wetano",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Mbere ya Krist\u0169",
+      "Nyuma ya Krist\u0169"
+    ],
+    "ERAS": [
+      "MK",
+      "NK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar\u0129",
+      "Feburuar\u0129",
+      "Machi",
+      "\u0128pur\u0169",
+      "M\u0129\u0129",
+      "Njuni",
+      "Njura\u0129",
+      "Agasti",
+      "Septemba",
+      "Okt\u0169ba",
+      "Novemba",
+      "Dicemba"
+    ],
+    "SHORTDAY": [
+      "KIU",
+      "MRA",
+      "WAI",
+      "WET",
+      "WEN",
+      "WTN",
+      "JUM"
+    ],
+    "SHORTMONTH": [
+      "JAN",
+      "FEB",
+      "MAC",
+      "\u0128PU",
+      "M\u0128\u0128",
+      "NJU",
+      "NJR",
+      "AGA",
+      "SPT",
+      "OKT",
+      "NOV",
+      "DEC"
+    ],
+    "STANDALONEMONTH": [
+      "Januar\u0129",
+      "Feburuar\u0129",
+      "Machi",
+      "\u0128pur\u0169",
+      "M\u0129\u0129",
+      "Njuni",
+      "Njura\u0129",
+      "Agasti",
+      "Septemba",
+      "Okt\u0169ba",
+      "Novemba",
+      "Dicemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mer-ke",
+  "localeID": "mer_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer.js
new file mode 100644
index 0000000..6cc84a0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mer.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "R\u0168",
+      "\u0168G"
+    ],
+    "DAY": [
+      "Kiumia",
+      "Muramuko",
+      "Wairi",
+      "Wethatu",
+      "Wena",
+      "Wetano",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Mbere ya Krist\u0169",
+      "Nyuma ya Krist\u0169"
+    ],
+    "ERAS": [
+      "MK",
+      "NK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar\u0129",
+      "Feburuar\u0129",
+      "Machi",
+      "\u0128pur\u0169",
+      "M\u0129\u0129",
+      "Njuni",
+      "Njura\u0129",
+      "Agasti",
+      "Septemba",
+      "Okt\u0169ba",
+      "Novemba",
+      "Dicemba"
+    ],
+    "SHORTDAY": [
+      "KIU",
+      "MRA",
+      "WAI",
+      "WET",
+      "WEN",
+      "WTN",
+      "JUM"
+    ],
+    "SHORTMONTH": [
+      "JAN",
+      "FEB",
+      "MAC",
+      "\u0128PU",
+      "M\u0128\u0128",
+      "NJU",
+      "NJR",
+      "AGA",
+      "SPT",
+      "OKT",
+      "NOV",
+      "DEC"
+    ],
+    "STANDALONEMONTH": [
+      "Januar\u0129",
+      "Feburuar\u0129",
+      "Machi",
+      "\u0128pur\u0169",
+      "M\u0129\u0129",
+      "Njuni",
+      "Njura\u0129",
+      "Agasti",
+      "Septemba",
+      "Okt\u0169ba",
+      "Novemba",
+      "Dicemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mer",
+  "localeID": "mer",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe-mu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe-mu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe-mu.js
new file mode 100644
index 0000000..55ef1ff
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_mfe-mu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "dimans",
+      "lindi",
+      "mardi",
+      "merkredi",
+      "zedi",
+      "vandredi",
+      "samdi"
+    ],
+    "ERANAMES": [
+      "avan Zezi-Krist",
+      "apre Zezi-Krist"
+    ],
+    "ERAS": [
+      "av. Z-K",
+      "ap. Z-K"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "zanvie",
+      "fevriye",
+      "mars",
+      "avril",
+      "me",
+      "zin",
+      "zilye",
+      "out",
+      "septam",
+      "oktob",
+      "novam",
+      "desam"
+    ],
+    "SHORTDAY": [
+      "dim",
+      "lin",
+      "mar",
+      "mer",
+      "ze",
+      "van",
+      "sam"
+    ],
+    "SHORTMONTH": [
+      "zan",
+      "fev",
+      "mar",
+      "avr",
+      "me",
+      "zin",
+      "zil",
+      "out",
+      "sep",
+      "okt",
+      "nov",
+      "des"
+    ],
+    "STANDALONEMONTH": [
+      "zanvie",
+      "fevriye",
+      "mars",
+      "avril",
+      "me",
+      "zin",
+      "zilye",
+      "out",
+      "septam",
+      "oktob",
+      "novam",
+      "desam"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MURs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "mfe-mu",
+  "localeID": "mfe_MU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[30/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-ir.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-ir.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-ir.js
new file mode 100644
index 0000000..9a83d4a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-ir.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb-arab-ir",
+  "localeID": "ckb_Arab_IR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab.js
new file mode 100644
index 0000000..6f4f7a8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb-arab",
+  "localeID": "ckb_Arab",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-iq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-iq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-iq.js
new file mode 100644
index 0000000..07f32c0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-iq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb-iq",
+  "localeID": "ckb_IQ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-ir.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-ir.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-ir.js
new file mode 100644
index 0000000..03dced5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-ir.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb-ir",
+  "localeID": "ckb_IR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn-iq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn-iq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn-iq.js
new file mode 100644
index 0000000..07eaee8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn-iq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb-latn-iq",
+  "localeID": "ckb_Latn_IQ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn.js
new file mode 100644
index 0000000..26f961f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb-latn",
+  "localeID": "ckb_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb.js
new file mode 100644
index 0000000..47f879e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb",
+  "localeID": "ckb",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs-cz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs-cz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs-cz.js
new file mode 100644
index 0000000..237ee3a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs-cz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopoledne",
+      "odpoledne"
+    ],
+    "DAY": [
+      "ned\u011ble",
+      "pond\u011bl\u00ed",
+      "\u00fater\u00fd",
+      "st\u0159eda",
+      "\u010dtvrtek",
+      "p\u00e1tek",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p\u0159. n. l.",
+      "n. l."
+    ],
+    "ERAS": [
+      "p\u0159. n. l.",
+      "n. l."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ledna",
+      "\u00fanora",
+      "b\u0159ezna",
+      "dubna",
+      "kv\u011btna",
+      "\u010dervna",
+      "\u010dervence",
+      "srpna",
+      "z\u00e1\u0159\u00ed",
+      "\u0159\u00edjna",
+      "listopadu",
+      "prosince"
+    ],
+    "SHORTDAY": [
+      "ne",
+      "po",
+      "\u00fat",
+      "st",
+      "\u010dt",
+      "p\u00e1",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "led",
+      "\u00fano",
+      "b\u0159e",
+      "dub",
+      "kv\u011b",
+      "\u010dvn",
+      "\u010dvc",
+      "srp",
+      "z\u00e1\u0159",
+      "\u0159\u00edj",
+      "lis",
+      "pro"
+    ],
+    "STANDALONEMONTH": [
+      "leden",
+      "\u00fanor",
+      "b\u0159ezen",
+      "duben",
+      "kv\u011bten",
+      "\u010derven",
+      "\u010dervenec",
+      "srpen",
+      "z\u00e1\u0159\u00ed",
+      "\u0159\u00edjen",
+      "listopad",
+      "prosinec"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. M. y H:mm:ss",
+    "mediumDate": "d. M. y",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "K\u010d",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "cs-cz",
+  "localeID": "cs_CZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs.js
new file mode 100644
index 0000000..5be6daf
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cs.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopoledne",
+      "odpoledne"
+    ],
+    "DAY": [
+      "ned\u011ble",
+      "pond\u011bl\u00ed",
+      "\u00fater\u00fd",
+      "st\u0159eda",
+      "\u010dtvrtek",
+      "p\u00e1tek",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p\u0159. n. l.",
+      "n. l."
+    ],
+    "ERAS": [
+      "p\u0159. n. l.",
+      "n. l."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "ledna",
+      "\u00fanora",
+      "b\u0159ezna",
+      "dubna",
+      "kv\u011btna",
+      "\u010dervna",
+      "\u010dervence",
+      "srpna",
+      "z\u00e1\u0159\u00ed",
+      "\u0159\u00edjna",
+      "listopadu",
+      "prosince"
+    ],
+    "SHORTDAY": [
+      "ne",
+      "po",
+      "\u00fat",
+      "st",
+      "\u010dt",
+      "p\u00e1",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "led",
+      "\u00fano",
+      "b\u0159e",
+      "dub",
+      "kv\u011b",
+      "\u010dvn",
+      "\u010dvc",
+      "srp",
+      "z\u00e1\u0159",
+      "\u0159\u00edj",
+      "lis",
+      "pro"
+    ],
+    "STANDALONEMONTH": [
+      "leden",
+      "\u00fanor",
+      "b\u0159ezen",
+      "duben",
+      "kv\u011bten",
+      "\u010derven",
+      "\u010dervenec",
+      "srpen",
+      "z\u00e1\u0159\u00ed",
+      "\u0159\u00edjen",
+      "listopad",
+      "prosinec"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. M. y H:mm:ss",
+    "mediumDate": "d. M. y",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "K\u010d",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "cs",
+  "localeID": "cs",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy-gb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy-gb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy-gb.js
new file mode 100644
index 0000000..d0074f8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy-gb.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Dydd Sul",
+      "Dydd Llun",
+      "Dydd Mawrth",
+      "Dydd Mercher",
+      "Dydd Iau",
+      "Dydd Gwener",
+      "Dydd Sadwrn"
+    ],
+    "ERANAMES": [
+      "Cyn Crist",
+      "Oed Crist"
+    ],
+    "ERAS": [
+      "CC",
+      "OC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ionawr",
+      "Chwefror",
+      "Mawrth",
+      "Ebrill",
+      "Mai",
+      "Mehefin",
+      "Gorffennaf",
+      "Awst",
+      "Medi",
+      "Hydref",
+      "Tachwedd",
+      "Rhagfyr"
+    ],
+    "SHORTDAY": [
+      "Sul",
+      "Llun",
+      "Maw",
+      "Mer",
+      "Iau",
+      "Gwen",
+      "Sad"
+    ],
+    "SHORTMONTH": [
+      "Ion",
+      "Chwef",
+      "Mawrth",
+      "Ebrill",
+      "Mai",
+      "Meh",
+      "Gorff",
+      "Awst",
+      "Medi",
+      "Hyd",
+      "Tach",
+      "Rhag"
+    ],
+    "STANDALONEMONTH": [
+      "Ionawr",
+      "Chwefror",
+      "Mawrth",
+      "Ebrill",
+      "Mai",
+      "Mehefin",
+      "Gorffennaf",
+      "Awst",
+      "Medi",
+      "Hydref",
+      "Tachwedd",
+      "Rhagfyr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "cy-gb",
+  "localeID": "cy_GB",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n == 3) {    return PLURAL_CATEGORY.FEW;  }  if (n == 6) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy.js
new file mode 100644
index 0000000..ca37d81
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cy.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Dydd Sul",
+      "Dydd Llun",
+      "Dydd Mawrth",
+      "Dydd Mercher",
+      "Dydd Iau",
+      "Dydd Gwener",
+      "Dydd Sadwrn"
+    ],
+    "ERANAMES": [
+      "Cyn Crist",
+      "Oed Crist"
+    ],
+    "ERAS": [
+      "CC",
+      "OC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ionawr",
+      "Chwefror",
+      "Mawrth",
+      "Ebrill",
+      "Mai",
+      "Mehefin",
+      "Gorffennaf",
+      "Awst",
+      "Medi",
+      "Hydref",
+      "Tachwedd",
+      "Rhagfyr"
+    ],
+    "SHORTDAY": [
+      "Sul",
+      "Llun",
+      "Maw",
+      "Mer",
+      "Iau",
+      "Gwen",
+      "Sad"
+    ],
+    "SHORTMONTH": [
+      "Ion",
+      "Chwef",
+      "Mawrth",
+      "Ebrill",
+      "Mai",
+      "Meh",
+      "Gorff",
+      "Awst",
+      "Medi",
+      "Hyd",
+      "Tach",
+      "Rhag"
+    ],
+    "STANDALONEMONTH": [
+      "Ionawr",
+      "Chwefror",
+      "Mawrth",
+      "Ebrill",
+      "Mai",
+      "Mehefin",
+      "Gorffennaf",
+      "Awst",
+      "Medi",
+      "Hydref",
+      "Tachwedd",
+      "Rhagfyr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "cy",
+  "localeID": "cy",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n == 3) {    return PLURAL_CATEGORY.FEW;  }  if (n == 6) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-dk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-dk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-dk.js
new file mode 100644
index 0000000..f0ef36f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-dk.js
@@ -0,0 +1,156 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+function getWT(v, f) {
+  if (f === 0) {
+    return {w: 0, t: 0};
+  }
+
+  while ((f % 10) === 0) {
+    f /= 10;
+    v--;
+  }
+
+  return {w: v, t: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "marts",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "maj",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "marts",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE 'den' d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd/MM/y HH.mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "da-dk",
+  "localeID": "da_DK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-gl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-gl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-gl.js
new file mode 100644
index 0000000..f1329d0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da-gl.js
@@ -0,0 +1,156 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+function getWT(v, f) {
+  if (f === 0) {
+    return {w: 0, t: 0};
+  }
+
+  while ((f % 10) === 0) {
+    f /= 10;
+    v--;
+  }
+
+  return {w: v, t: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "marts",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "maj",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "marts",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE 'den' d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd/MM/y HH.mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "da-gl",
+  "localeID": "da_GL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da.js
new file mode 100644
index 0000000..5297d98
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_da.js
@@ -0,0 +1,156 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+function getWT(v, f) {
+  if (f === 0) {
+    return {w: 0, t: 0};
+  }
+
+  while ((f % 10) === 0) {
+    f /= 10;
+    v--;
+  }
+
+  return {w: v, t: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "s\u00f8ndag",
+      "mandag",
+      "tirsdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f8rdag"
+    ],
+    "ERANAMES": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "marts",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "s\u00f8n.",
+      "man.",
+      "tir.",
+      "ons.",
+      "tor.",
+      "fre.",
+      "l\u00f8r."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "maj",
+      "jun.",
+      "jul.",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "marts",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE 'den' d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH.mm.ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH.mm.ss",
+    "short": "dd/MM/y HH.mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "da",
+  "localeID": "da",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  var wt = getWT(vf.v, vf.f);  if (n == 1 || wt.t != 0 && (i == 0 || i == 1)) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav-ke.js
new file mode 100644
index 0000000..4511181
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Luma lwa K",
+      "luma lwa p"
+    ],
+    "DAY": [
+      "Ituku ja jumwa",
+      "Kuramuka jimweri",
+      "Kuramuka kawi",
+      "Kuramuka kadadu",
+      "Kuramuka kana",
+      "Kuramuka kasanu",
+      "Kifula nguwo"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristo",
+      "Baada ya Kristo"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mori ghwa imbiri",
+      "Mori ghwa kawi",
+      "Mori ghwa kadadu",
+      "Mori ghwa kana",
+      "Mori ghwa kasanu",
+      "Mori ghwa karandadu",
+      "Mori ghwa mfungade",
+      "Mori ghwa wunyanya",
+      "Mori ghwa ikenda",
+      "Mori ghwa ikumi",
+      "Mori ghwa ikumi na imweri",
+      "Mori ghwa ikumi na iwi"
+    ],
+    "SHORTDAY": [
+      "Jum",
+      "Jim",
+      "Kaw",
+      "Kad",
+      "Kan",
+      "Kas",
+      "Ngu"
+    ],
+    "SHORTMONTH": [
+      "Imb",
+      "Kaw",
+      "Kad",
+      "Kan",
+      "Kas",
+      "Kar",
+      "Mfu",
+      "Wun",
+      "Ike",
+      "Iku",
+      "Imw",
+      "Iwi"
+    ],
+    "STANDALONEMONTH": [
+      "Mori ghwa imbiri",
+      "Mori ghwa kawi",
+      "Mori ghwa kadadu",
+      "Mori ghwa kana",
+      "Mori ghwa kasanu",
+      "Mori ghwa karandadu",
+      "Mori ghwa mfungade",
+      "Mori ghwa wunyanya",
+      "Mori ghwa ikenda",
+      "Mori ghwa ikumi",
+      "Mori ghwa ikumi na imweri",
+      "Mori ghwa ikumi na iwi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "dav-ke",
+  "localeID": "dav_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav.js
new file mode 100644
index 0000000..642c1fe
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dav.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Luma lwa K",
+      "luma lwa p"
+    ],
+    "DAY": [
+      "Ituku ja jumwa",
+      "Kuramuka jimweri",
+      "Kuramuka kawi",
+      "Kuramuka kadadu",
+      "Kuramuka kana",
+      "Kuramuka kasanu",
+      "Kifula nguwo"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristo",
+      "Baada ya Kristo"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mori ghwa imbiri",
+      "Mori ghwa kawi",
+      "Mori ghwa kadadu",
+      "Mori ghwa kana",
+      "Mori ghwa kasanu",
+      "Mori ghwa karandadu",
+      "Mori ghwa mfungade",
+      "Mori ghwa wunyanya",
+      "Mori ghwa ikenda",
+      "Mori ghwa ikumi",
+      "Mori ghwa ikumi na imweri",
+      "Mori ghwa ikumi na iwi"
+    ],
+    "SHORTDAY": [
+      "Jum",
+      "Jim",
+      "Kaw",
+      "Kad",
+      "Kan",
+      "Kas",
+      "Ngu"
+    ],
+    "SHORTMONTH": [
+      "Imb",
+      "Kaw",
+      "Kad",
+      "Kan",
+      "Kas",
+      "Kar",
+      "Mfu",
+      "Wun",
+      "Ike",
+      "Iku",
+      "Imw",
+      "Iwi"
+    ],
+    "STANDALONEMONTH": [
+      "Mori ghwa imbiri",
+      "Mori ghwa kawi",
+      "Mori ghwa kadadu",
+      "Mori ghwa kana",
+      "Mori ghwa kasanu",
+      "Mori ghwa karandadu",
+      "Mori ghwa mfungade",
+      "Mori ghwa wunyanya",
+      "Mori ghwa ikenda",
+      "Mori ghwa ikumi",
+      "Mori ghwa ikumi na imweri",
+      "Mori ghwa ikumi na iwi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "dav",
+  "localeID": "dav",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-at.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-at.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-at.js
new file mode 100644
index 0000000..22f83e4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-at.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nachm."
+    ],
+    "DAY": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "J\u00e4nner",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "So.",
+      "Mo.",
+      "Di.",
+      "Mi.",
+      "Do.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "J\u00e4n.",
+      "Feb.",
+      "M\u00e4rz",
+      "Apr.",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "J\u00e4nner",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "de-at",
+  "localeID": "de_AT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-be.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-be.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-be.js
new file mode 100644
index 0000000..0b519bd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-be.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nachm."
+    ],
+    "DAY": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "So.",
+      "Mo.",
+      "Di.",
+      "Mi.",
+      "Do.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4rz",
+      "Apr.",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "de-be",
+  "localeID": "de_BE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-ch.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-ch.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-ch.js
new file mode 100644
index 0000000..14554f9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-ch.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nachm."
+    ],
+    "DAY": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "So.",
+      "Mo.",
+      "Di.",
+      "Mi.",
+      "Do.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4rz",
+      "Apr.",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "'",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "de-ch",
+  "localeID": "de_CH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-de.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-de.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-de.js
new file mode 100644
index 0000000..5227312
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-de.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nachm."
+    ],
+    "DAY": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "So.",
+      "Mo.",
+      "Di.",
+      "Mi.",
+      "Do.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4rz",
+      "Apr.",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "de-de",
+  "localeID": "de_DE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[29/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-li.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-li.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-li.js
new file mode 100644
index 0000000..fa93e9d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-li.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nachm."
+    ],
+    "DAY": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "So.",
+      "Mo.",
+      "Di.",
+      "Mi.",
+      "Do.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4rz",
+      "Apr.",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "'",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "de-li",
+  "localeID": "de_LI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-lu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-lu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-lu.js
new file mode 100644
index 0000000..2bca130
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de-lu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nachm."
+    ],
+    "DAY": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "So.",
+      "Mo.",
+      "Di.",
+      "Mi.",
+      "Do.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4rz",
+      "Apr.",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "de-lu",
+  "localeID": "de_LU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de.js
new file mode 100644
index 0000000..cc69b3a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_de.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nachm."
+    ],
+    "DAY": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "So.",
+      "Mo.",
+      "Di.",
+      "Mi.",
+      "Do.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4rz",
+      "Apr.",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "de",
+  "localeID": "de",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje-ne.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje-ne.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje-ne.js
new file mode 100644
index 0000000..468c855
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje-ne.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Subbaahi",
+      "Zaarikay b"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atinni",
+      "Atalaata",
+      "Alarba",
+      "Alhamisi",
+      "Alzuma",
+      "Asibti"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa zamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alz",
+      "Asi"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "dje-ne",
+  "localeID": "dje_NE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje.js
new file mode 100644
index 0000000..6b1f122
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dje.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Subbaahi",
+      "Zaarikay b"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atinni",
+      "Atalaata",
+      "Alarba",
+      "Alhamisi",
+      "Alzuma",
+      "Asibti"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa zamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alz",
+      "Asi"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "dje",
+  "localeID": "dje",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb-de.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb-de.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb-de.js
new file mode 100644
index 0000000..43e3c7e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb-de.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopo\u0142dnja",
+      "w\u00f3tpo\u0142dnja"
+    ],
+    "DAY": [
+      "nje\u017aela",
+      "p\u00f3nje\u017aele",
+      "wa\u0142tora",
+      "srjoda",
+      "stw\u00f3rtk",
+      "p\u011btk",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p\u015bed Kristusowym naro\u017aenim",
+      "p\u00f3 Kristusowem naro\u017aenju"
+    ],
+    "ERAS": [
+      "p\u015b.Chr.n.",
+      "p\u00f3 Chr.n."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januara",
+      "februara",
+      "m\u011brca",
+      "apryla",
+      "maja",
+      "junija",
+      "julija",
+      "awgusta",
+      "septembra",
+      "oktobra",
+      "nowembra",
+      "decembra"
+    ],
+    "SHORTDAY": [
+      "nje",
+      "p\u00f3n",
+      "wa\u0142",
+      "srj",
+      "stw",
+      "p\u011bt",
+      "sob"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "m\u011br.",
+      "apr.",
+      "maj.",
+      "jun.",
+      "jul.",
+      "awg.",
+      "sep.",
+      "okt.",
+      "now.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "m\u011brc",
+      "apryl",
+      "maj",
+      "junij",
+      "julij",
+      "awgust",
+      "september",
+      "oktober",
+      "nowember",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d.M.y H:mm:ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "H:mm:ss",
+    "short": "d.M.yy H:mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "dsb-de",
+  "localeID": "dsb_DE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb.js
new file mode 100644
index 0000000..01137da
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dsb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopo\u0142dnja",
+      "w\u00f3tpo\u0142dnja"
+    ],
+    "DAY": [
+      "nje\u017aela",
+      "p\u00f3nje\u017aele",
+      "wa\u0142tora",
+      "srjoda",
+      "stw\u00f3rtk",
+      "p\u011btk",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p\u015bed Kristusowym naro\u017aenim",
+      "p\u00f3 Kristusowem naro\u017aenju"
+    ],
+    "ERAS": [
+      "p\u015b.Chr.n.",
+      "p\u00f3 Chr.n."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januara",
+      "februara",
+      "m\u011brca",
+      "apryla",
+      "maja",
+      "junija",
+      "julija",
+      "awgusta",
+      "septembra",
+      "oktobra",
+      "nowembra",
+      "decembra"
+    ],
+    "SHORTDAY": [
+      "nje",
+      "p\u00f3n",
+      "wa\u0142",
+      "srj",
+      "stw",
+      "p\u011bt",
+      "sob"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "m\u011br.",
+      "apr.",
+      "maj.",
+      "jun.",
+      "jul.",
+      "awg.",
+      "sep.",
+      "okt.",
+      "now.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "m\u011brc",
+      "apryl",
+      "maj",
+      "junij",
+      "julij",
+      "awgust",
+      "september",
+      "oktober",
+      "nowember",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d.M.y H:mm:ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "H:mm:ss",
+    "short": "d.M.yy H:mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "dsb",
+  "localeID": "dsb",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua-cm.js
new file mode 100644
index 0000000..eacb47f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "idi\u0253a",
+      "eby\u00e1mu"
+    ],
+    "DAY": [
+      "\u00e9ti",
+      "m\u0254\u0301s\u00fa",
+      "kwas\u00fa",
+      "muk\u0254\u0301s\u00fa",
+      "\u014bgis\u00fa",
+      "\u0257\u00f3n\u025bs\u00fa",
+      "esa\u0253as\u00fa"
+    ],
+    "ERANAMES": [
+      "\u0253oso \u0253w\u00e1 y\u00e1\u0253e l\u00e1",
+      "mb\u00fasa kw\u00e9di a Y\u00e9s"
+    ],
+    "ERAS": [
+      "\u0253.Ys",
+      "mb.Ys"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "dim\u0254\u0301di",
+      "\u014bg\u0254nd\u025b",
+      "s\u0254\u014b\u025b",
+      "di\u0253\u00e1\u0253\u00e1",
+      "emiasele",
+      "es\u0254p\u025bs\u0254p\u025b",
+      "madi\u0253\u025b\u0301d\u00ed\u0253\u025b\u0301",
+      "di\u014bgindi",
+      "ny\u025bt\u025bki",
+      "may\u00e9s\u025b\u0301",
+      "tin\u00edn\u00ed",
+      "el\u00e1\u014bg\u025b\u0301"
+    ],
+    "SHORTDAY": [
+      "\u00e9t",
+      "m\u0254\u0301s",
+      "kwa",
+      "muk",
+      "\u014bgi",
+      "\u0257\u00f3n",
+      "esa"
+    ],
+    "SHORTMONTH": [
+      "di",
+      "\u014bg\u0254n",
+      "s\u0254\u014b",
+      "di\u0253",
+      "emi",
+      "es\u0254",
+      "mad",
+      "di\u014b",
+      "ny\u025bt",
+      "may",
+      "tin",
+      "el\u00e1"
+    ],
+    "STANDALONEMONTH": [
+      "dim\u0254\u0301di",
+      "\u014bg\u0254nd\u025b",
+      "s\u0254\u014b\u025b",
+      "di\u0253\u00e1\u0253\u00e1",
+      "emiasele",
+      "es\u0254p\u025bs\u0254p\u025b",
+      "madi\u0253\u025b\u0301d\u00ed\u0253\u025b\u0301",
+      "di\u014bgindi",
+      "ny\u025bt\u025bki",
+      "may\u00e9s\u025b\u0301",
+      "tin\u00edn\u00ed",
+      "el\u00e1\u014bg\u025b\u0301"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "dua-cm",
+  "localeID": "dua_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua.js
new file mode 100644
index 0000000..cf31aef
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dua.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "idi\u0253a",
+      "eby\u00e1mu"
+    ],
+    "DAY": [
+      "\u00e9ti",
+      "m\u0254\u0301s\u00fa",
+      "kwas\u00fa",
+      "muk\u0254\u0301s\u00fa",
+      "\u014bgis\u00fa",
+      "\u0257\u00f3n\u025bs\u00fa",
+      "esa\u0253as\u00fa"
+    ],
+    "ERANAMES": [
+      "\u0253oso \u0253w\u00e1 y\u00e1\u0253e l\u00e1",
+      "mb\u00fasa kw\u00e9di a Y\u00e9s"
+    ],
+    "ERAS": [
+      "\u0253.Ys",
+      "mb.Ys"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "dim\u0254\u0301di",
+      "\u014bg\u0254nd\u025b",
+      "s\u0254\u014b\u025b",
+      "di\u0253\u00e1\u0253\u00e1",
+      "emiasele",
+      "es\u0254p\u025bs\u0254p\u025b",
+      "madi\u0253\u025b\u0301d\u00ed\u0253\u025b\u0301",
+      "di\u014bgindi",
+      "ny\u025bt\u025bki",
+      "may\u00e9s\u025b\u0301",
+      "tin\u00edn\u00ed",
+      "el\u00e1\u014bg\u025b\u0301"
+    ],
+    "SHORTDAY": [
+      "\u00e9t",
+      "m\u0254\u0301s",
+      "kwa",
+      "muk",
+      "\u014bgi",
+      "\u0257\u00f3n",
+      "esa"
+    ],
+    "SHORTMONTH": [
+      "di",
+      "\u014bg\u0254n",
+      "s\u0254\u014b",
+      "di\u0253",
+      "emi",
+      "es\u0254",
+      "mad",
+      "di\u014b",
+      "ny\u025bt",
+      "may",
+      "tin",
+      "el\u00e1"
+    ],
+    "STANDALONEMONTH": [
+      "dim\u0254\u0301di",
+      "\u014bg\u0254nd\u025b",
+      "s\u0254\u014b\u025b",
+      "di\u0253\u00e1\u0253\u00e1",
+      "emiasele",
+      "es\u0254p\u025bs\u0254p\u025b",
+      "madi\u0253\u025b\u0301d\u00ed\u0253\u025b\u0301",
+      "di\u014bgindi",
+      "ny\u025bt\u025bki",
+      "may\u00e9s\u025b\u0301",
+      "tin\u00edn\u00ed",
+      "el\u00e1\u014bg\u025b\u0301"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "dua",
+  "localeID": "dua",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo-sn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo-sn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo-sn.js
new file mode 100644
index 0000000..2e1c1fc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo-sn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Dimas",
+      "Tene\u014b",
+      "Talata",
+      "Alarbay",
+      "Aramisay",
+      "Arjuma",
+      "Sibiti"
+    ],
+    "ERANAMES": [
+      "Ari\u014buu Yeesu",
+      "Atoo\u014be Yeesu"
+    ],
+    "ERAS": [
+      "ArY",
+      "AtY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Sanvie",
+      "F\u00e9birie",
+      "Mars",
+      "Aburil",
+      "Mee",
+      "Sue\u014b",
+      "S\u00fauyee",
+      "Ut",
+      "Settembar",
+      "Oktobar",
+      "Novembar",
+      "Disambar"
+    ],
+    "SHORTDAY": [
+      "Dim",
+      "Ten",
+      "Tal",
+      "Ala",
+      "Ara",
+      "Arj",
+      "Sib"
+    ],
+    "SHORTMONTH": [
+      "Sa",
+      "Fe",
+      "Ma",
+      "Ab",
+      "Me",
+      "Su",
+      "S\u00fa",
+      "Ut",
+      "Se",
+      "Ok",
+      "No",
+      "De"
+    ],
+    "STANDALONEMONTH": [
+      "Sanvie",
+      "F\u00e9birie",
+      "Mars",
+      "Aburil",
+      "Mee",
+      "Sue\u014b",
+      "S\u00fauyee",
+      "Ut",
+      "Settembar",
+      "Oktobar",
+      "Novembar",
+      "Disambar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "dyo-sn",
+  "localeID": "dyo_SN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo.js
new file mode 100644
index 0000000..7978c73
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dyo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Dimas",
+      "Tene\u014b",
+      "Talata",
+      "Alarbay",
+      "Aramisay",
+      "Arjuma",
+      "Sibiti"
+    ],
+    "ERANAMES": [
+      "Ari\u014buu Yeesu",
+      "Atoo\u014be Yeesu"
+    ],
+    "ERAS": [
+      "ArY",
+      "AtY"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Sanvie",
+      "F\u00e9birie",
+      "Mars",
+      "Aburil",
+      "Mee",
+      "Sue\u014b",
+      "S\u00fauyee",
+      "Ut",
+      "Settembar",
+      "Oktobar",
+      "Novembar",
+      "Disambar"
+    ],
+    "SHORTDAY": [
+      "Dim",
+      "Ten",
+      "Tal",
+      "Ala",
+      "Ara",
+      "Arj",
+      "Sib"
+    ],
+    "SHORTMONTH": [
+      "Sa",
+      "Fe",
+      "Ma",
+      "Ab",
+      "Me",
+      "Su",
+      "S\u00fa",
+      "Ut",
+      "Se",
+      "Ok",
+      "No",
+      "De"
+    ],
+    "STANDALONEMONTH": [
+      "Sanvie",
+      "F\u00e9birie",
+      "Mars",
+      "Aburil",
+      "Mee",
+      "Sue\u014b",
+      "S\u00fauyee",
+      "Ut",
+      "Settembar",
+      "Oktobar",
+      "Novembar",
+      "Disambar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "dyo",
+  "localeID": "dyo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz-bt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz-bt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz-bt.js
new file mode 100644
index 0000000..58d59ef
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz-bt.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0f66\u0f94\u0f0b\u0f46\u0f0b",
+      "\u0f55\u0fb1\u0f72\u0f0b\u0f46\u0f0b"
+    ],
+    "DAY": [
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f51\u0f44\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTDAY": [
+      "\u0f5f\u0fb3\u0f0b",
+      "\u0f58\u0f72\u0f62\u0f0b",
+      "\u0f63\u0fb7\u0f42\u0f0b",
+      "\u0f55\u0f74\u0f62\u0f0b",
+      "\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f66\u0fa4\u0f7a\u0f53\u0f0b",
+      "\u0f49\u0f72\u0f0b"
+    ],
+    "SHORTMONTH": [
+      "\u0f21",
+      "\u0f22",
+      "\u0f23",
+      "\u0f24",
+      "\u0f25",
+      "\u0f26",
+      "\u0f27",
+      "\u0f28",
+      "\u0f29",
+      "\u0f21\u0f20",
+      "\u0f21\u0f21",
+      "12"
+    ],
+    "STANDALONEMONTH": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f51\u0f44\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, \u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0bdd",
+    "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0b dd",
+    "medium": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a",
+    "mediumDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd",
+    "mediumTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a",
+    "short": "y-MM-dd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a",
+    "shortDate": "y-MM-dd",
+    "shortTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nu.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "dz-bt",
+  "localeID": "dz_BT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz.js
new file mode 100644
index 0000000..d1c2cc8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_dz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0f66\u0f94\u0f0b\u0f46\u0f0b",
+      "\u0f55\u0fb1\u0f72\u0f0b\u0f46\u0f0b"
+    ],
+    "DAY": [
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0f5f\u0fb3\u0f0b\u0f51\u0f44\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "SHORTDAY": [
+      "\u0f5f\u0fb3\u0f0b",
+      "\u0f58\u0f72\u0f62\u0f0b",
+      "\u0f63\u0fb7\u0f42\u0f0b",
+      "\u0f55\u0f74\u0f62\u0f0b",
+      "\u0f66\u0f44\u0f66\u0f0b",
+      "\u0f66\u0fa4\u0f7a\u0f53\u0f0b",
+      "\u0f49\u0f72\u0f0b"
+    ],
+    "SHORTMONTH": [
+      "\u0f21",
+      "\u0f22",
+      "\u0f23",
+      "\u0f24",
+      "\u0f25",
+      "\u0f26",
+      "\u0f27",
+      "\u0f28",
+      "\u0f29",
+      "\u0f21\u0f20",
+      "\u0f21\u0f21",
+      "12"
+    ],
+    "STANDALONEMONTH": [
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f51\u0f44\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f63\u0f94\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
+      "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, \u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0bdd",
+    "longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM \u0f5a\u0f7a\u0f66\u0f0b dd",
+    "medium": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a",
+    "mediumDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by \u0f5f\u0fb3\u0f0bMMM \u0f5a\u0f7a\u0f66\u0f0bdd",
+    "mediumTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0bh:mm:ss a",
+    "short": "y-MM-dd \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a",
+    "shortDate": "y-MM-dd",
+    "shortTime": "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b h \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nu.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "dz",
+  "localeID": "dz",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu-ke.js
new file mode 100644
index 0000000..28b3a89
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "KI",
+      "UT"
+    ],
+    "DAY": [
+      "Kiumia",
+      "Njumatatu",
+      "Njumaine",
+      "Njumatano",
+      "Aramithi",
+      "Njumaa",
+      "NJumamothii"
+    ],
+    "ERANAMES": [
+      "Mbere ya Kristo",
+      "Thutha wa Kristo"
+    ],
+    "ERAS": [
+      "MK",
+      "TK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mweri wa mbere",
+      "Mweri wa ka\u0129ri",
+      "Mweri wa kathat\u0169",
+      "Mweri wa kana",
+      "Mweri wa gatano",
+      "Mweri wa gatantat\u0169",
+      "Mweri wa m\u0169gwanja",
+      "Mweri wa kanana",
+      "Mweri wa kenda",
+      "Mweri wa ik\u0169mi",
+      "Mweri wa ik\u0169mi na \u0169mwe",
+      "Mweri wa ik\u0169mi na Ka\u0129r\u0129"
+    ],
+    "SHORTDAY": [
+      "Kma",
+      "Tat",
+      "Ine",
+      "Tan",
+      "Arm",
+      "Maa",
+      "NMM"
+    ],
+    "SHORTMONTH": [
+      "Mbe",
+      "Kai",
+      "Kat",
+      "Kan",
+      "Gat",
+      "Gan",
+      "Mug",
+      "Knn",
+      "Ken",
+      "Iku",
+      "Imw",
+      "Igi"
+    ],
+    "STANDALONEMONTH": [
+      "Mweri wa mbere",
+      "Mweri wa ka\u0129ri",
+      "Mweri wa kathat\u0169",
+      "Mweri wa kana",
+      "Mweri wa gatano",
+      "Mweri wa gatantat\u0169",
+      "Mweri wa m\u0169gwanja",
+      "Mweri wa kanana",
+      "Mweri wa kenda",
+      "Mweri wa ik\u0169mi",
+      "Mweri wa ik\u0169mi na \u0169mwe",
+      "Mweri wa ik\u0169mi na Ka\u0129r\u0129"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ebu-ke",
+  "localeID": "ebu_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu.js
new file mode 100644
index 0000000..3ccd086
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ebu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "KI",
+      "UT"
+    ],
+    "DAY": [
+      "Kiumia",
+      "Njumatatu",
+      "Njumaine",
+      "Njumatano",
+      "Aramithi",
+      "Njumaa",
+      "NJumamothii"
+    ],
+    "ERANAMES": [
+      "Mbere ya Kristo",
+      "Thutha wa Kristo"
+    ],
+    "ERAS": [
+      "MK",
+      "TK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mweri wa mbere",
+      "Mweri wa ka\u0129ri",
+      "Mweri wa kathat\u0169",
+      "Mweri wa kana",
+      "Mweri wa gatano",
+      "Mweri wa gatantat\u0169",
+      "Mweri wa m\u0169gwanja",
+      "Mweri wa kanana",
+      "Mweri wa kenda",
+      "Mweri wa ik\u0169mi",
+      "Mweri wa ik\u0169mi na \u0169mwe",
+      "Mweri wa ik\u0169mi na Ka\u0129r\u0129"
+    ],
+    "SHORTDAY": [
+      "Kma",
+      "Tat",
+      "Ine",
+      "Tan",
+      "Arm",
+      "Maa",
+      "NMM"
+    ],
+    "SHORTMONTH": [
+      "Mbe",
+      "Kai",
+      "Kat",
+      "Kan",
+      "Gat",
+      "Gan",
+      "Mug",
+      "Knn",
+      "Ken",
+      "Iku",
+      "Imw",
+      "Igi"
+    ],
+    "STANDALONEMONTH": [
+      "Mweri wa mbere",
+      "Mweri wa ka\u0129ri",
+      "Mweri wa kathat\u0169",
+      "Mweri wa kana",
+      "Mweri wa gatano",
+      "Mweri wa gatantat\u0169",
+      "Mweri wa m\u0169gwanja",
+      "Mweri wa kanana",
+      "Mweri wa kenda",
+      "Mweri wa ik\u0169mi",
+      "Mweri wa ik\u0169mi na \u0169mwe",
+      "Mweri wa ik\u0169mi na Ka\u0129r\u0129"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ebu",
+  "localeID": "ebu",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-gh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-gh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-gh.js
new file mode 100644
index 0000000..d89ffc6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-gh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u014bdi",
+      "\u0263etr\u0254"
+    ],
+    "DAY": [
+      "k\u0254si\u0256a",
+      "dzo\u0256a",
+      "bla\u0256a",
+      "ku\u0256a",
+      "yawo\u0256a",
+      "fi\u0256a",
+      "memle\u0256a"
+    ],
+    "ERANAMES": [
+      "Hafi Yesu Va Do \u014bg\u0254",
+      "Yesu \u014a\u0254li"
+    ],
+    "ERAS": [
+      "hY",
+      "Y\u014b"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "dzove",
+      "dzodze",
+      "tedoxe",
+      "af\u0254f\u0129e",
+      "dama",
+      "masa",
+      "siaml\u0254m",
+      "deasiamime",
+      "any\u0254ny\u0254",
+      "kele",
+      "ade\u025bmekp\u0254xe",
+      "dzome"
+    ],
+    "SHORTDAY": [
+      "k\u0254s",
+      "dzo",
+      "bla",
+      "ku\u0256",
+      "yaw",
+      "fi\u0256",
+      "mem"
+    ],
+    "SHORTMONTH": [
+      "dzv",
+      "dzd",
+      "ted",
+      "af\u0254",
+      "dam",
+      "mas",
+      "sia",
+      "dea",
+      "any",
+      "kel",
+      "ade",
+      "dzm"
+    ],
+    "STANDALONEMONTH": [
+      "dzove",
+      "dzodze",
+      "tedoxe",
+      "af\u0254f\u0129e",
+      "dama",
+      "masa",
+      "siaml\u0254m",
+      "deasiamime",
+      "any\u0254ny\u0254",
+      "kele",
+      "ade\u025bmekp\u0254xe",
+      "dzome"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d 'lia' y",
+    "longDate": "MMMM d 'lia' y",
+    "medium": "MMM d 'lia', y a 'ga' h:mm:ss",
+    "mediumDate": "MMM d 'lia', y",
+    "mediumTime": "a 'ga' h:mm:ss",
+    "short": "M/d/yy a 'ga' h:mm",
+    "shortDate": "M/d/yy",
+    "shortTime": "a 'ga' h:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GHS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ee-gh",
+  "localeID": "ee_GH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-tg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-tg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-tg.js
new file mode 100644
index 0000000..4fbc377
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee-tg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u014bdi",
+      "\u0263etr\u0254"
+    ],
+    "DAY": [
+      "k\u0254si\u0256a",
+      "dzo\u0256a",
+      "bla\u0256a",
+      "ku\u0256a",
+      "yawo\u0256a",
+      "fi\u0256a",
+      "memle\u0256a"
+    ],
+    "ERANAMES": [
+      "Hafi Yesu Va Do \u014bg\u0254",
+      "Yesu \u014a\u0254li"
+    ],
+    "ERAS": [
+      "hY",
+      "Y\u014b"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "dzove",
+      "dzodze",
+      "tedoxe",
+      "af\u0254f\u0129e",
+      "dama",
+      "masa",
+      "siaml\u0254m",
+      "deasiamime",
+      "any\u0254ny\u0254",
+      "kele",
+      "ade\u025bmekp\u0254xe",
+      "dzome"
+    ],
+    "SHORTDAY": [
+      "k\u0254s",
+      "dzo",
+      "bla",
+      "ku\u0256",
+      "yaw",
+      "fi\u0256",
+      "mem"
+    ],
+    "SHORTMONTH": [
+      "dzv",
+      "dzd",
+      "ted",
+      "af\u0254",
+      "dam",
+      "mas",
+      "sia",
+      "dea",
+      "any",
+      "kel",
+      "ade",
+      "dzm"
+    ],
+    "STANDALONEMONTH": [
+      "dzove",
+      "dzodze",
+      "tedoxe",
+      "af\u0254f\u0129e",
+      "dama",
+      "masa",
+      "siaml\u0254m",
+      "deasiamime",
+      "any\u0254ny\u0254",
+      "kele",
+      "ade\u025bmekp\u0254xe",
+      "dzome"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d 'lia' y",
+    "longDate": "MMMM d 'lia' y",
+    "medium": "MMM d 'lia', y a 'ga' h:mm:ss",
+    "mediumDate": "MMM d 'lia', y",
+    "mediumTime": "a 'ga' h:mm:ss",
+    "short": "M/d/yy a 'ga' h:mm",
+    "shortDate": "M/d/yy",
+    "shortTime": "a 'ga' h:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ee-tg",
+  "localeID": "ee_TG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee.js
new file mode 100644
index 0000000..dbd4d3c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ee.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u014bdi",
+      "\u0263etr\u0254"
+    ],
+    "DAY": [
+      "k\u0254si\u0256a",
+      "dzo\u0256a",
+      "bla\u0256a",
+      "ku\u0256a",
+      "yawo\u0256a",
+      "fi\u0256a",
+      "memle\u0256a"
+    ],
+    "ERANAMES": [
+      "Hafi Yesu Va Do \u014bg\u0254",
+      "Yesu \u014a\u0254li"
+    ],
+    "ERAS": [
+      "hY",
+      "Y\u014b"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "dzove",
+      "dzodze",
+      "tedoxe",
+      "af\u0254f\u0129e",
+      "dama",
+      "masa",
+      "siaml\u0254m",
+      "deasiamime",
+      "any\u0254ny\u0254",
+      "kele",
+      "ade\u025bmekp\u0254xe",
+      "dzome"
+    ],
+    "SHORTDAY": [
+      "k\u0254s",
+      "dzo",
+      "bla",
+      "ku\u0256",
+      "yaw",
+      "fi\u0256",
+      "mem"
+    ],
+    "SHORTMONTH": [
+      "dzv",
+      "dzd",
+      "ted",
+      "af\u0254",
+      "dam",
+      "mas",
+      "sia",
+      "dea",
+      "any",
+      "kel",
+      "ade",
+      "dzm"
+    ],
+    "STANDALONEMONTH": [
+      "dzove",
+      "dzodze",
+      "tedoxe",
+      "af\u0254f\u0129e",
+      "dama",
+      "masa",
+      "siaml\u0254m",
+      "deasiamime",
+      "any\u0254ny\u0254",
+      "kele",
+      "ade\u025bmekp\u0254xe",
+      "dzome"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d 'lia' y",
+    "longDate": "MMMM d 'lia' y",
+    "medium": "MMM d 'lia', y a 'ga' h:mm:ss",
+    "mediumDate": "MMM d 'lia', y",
+    "mediumTime": "a 'ga' h:mm:ss",
+    "short": "M/d/yy a 'ga' h:mm",
+    "shortDate": "M/d/yy",
+    "shortTime": "a 'ga' h:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GHS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ee",
+  "localeID": "ee",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-cy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-cy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-cy.js
new file mode 100644
index 0000000..41b44d3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-cy.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u03c0.\u03bc.",
+      "\u03bc.\u03bc."
+    ],
+    "DAY": [
+      "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+      "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+      "\u03a4\u03c1\u03af\u03c4\u03b7",
+      "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+      "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+      "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+      "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"
+    ],
+    "ERANAMES": [
+      "\u03c0\u03c1\u03bf \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd",
+      "\u03bc\u03b5\u03c4\u03ac \u03a7\u03c1\u03b9\u03c3\u03c4\u03cc\u03bd"
+    ],
+    "ERAS": [
+      "\u03c0.\u03a7.",
+      "\u03bc.\u03a7."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+      "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+      "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5",
+      "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5",
+      "\u039c\u03b1\u0390\u03bf\u03c5",
+      "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5",
+      "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5",
+      "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5",
+      "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"
+    ],
+    "SHORTDAY": [
+      "\u039a\u03c5\u03c1",
+      "\u0394\u03b5\u03c5",
+      "\u03a4\u03c1\u03af",
+      "\u03a4\u03b5\u03c4",
+      "\u03a0\u03ad\u03bc",
+      "\u03a0\u03b1\u03c1",
+      "\u03a3\u03ac\u03b2"
+    ],
+    "SHORTMONTH": [
+      "\u0399\u03b1\u03bd",
+      "\u03a6\u03b5\u03b2",
+      "\u039c\u03b1\u03c1",
+      "\u0391\u03c0\u03c1",
+      "\u039c\u03b1\u0390",
+      "\u0399\u03bf\u03c5\u03bd",
+      "\u0399\u03bf\u03c5\u03bb",
+      "\u0391\u03c5\u03b3",
+      "\u03a3\u03b5\u03c0",
+      "\u039f\u03ba\u03c4",
+      "\u039d\u03bf\u03b5",
+      "\u0394\u03b5\u03ba"
+    ],
+    "STANDALONEMONTH": [
+      "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+      "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+      "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2",
+      "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2",
+      "\u039c\u03ac\u03b9\u03bf\u03c2",
+      "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2",
+      "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2",
+      "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2",
+      "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "el-cy",
+  "localeID": "el_CY",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-gr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-gr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-gr.js
new file mode 100644
index 0000000..775d3fb
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el-gr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u03c0.\u03bc.",
+      "\u03bc.\u03bc."
+    ],
+    "DAY": [
+      "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+      "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+      "\u03a4\u03c1\u03af\u03c4\u03b7",
+      "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+      "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+      "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+      "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"
+    ],
+    "ERANAMES": [
+      "\u03c0\u03c1\u03bf \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd",
+      "\u03bc\u03b5\u03c4\u03ac \u03a7\u03c1\u03b9\u03c3\u03c4\u03cc\u03bd"
+    ],
+    "ERAS": [
+      "\u03c0.\u03a7.",
+      "\u03bc.\u03a7."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+      "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+      "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5",
+      "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5",
+      "\u039c\u03b1\u0390\u03bf\u03c5",
+      "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5",
+      "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5",
+      "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5",
+      "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"
+    ],
+    "SHORTDAY": [
+      "\u039a\u03c5\u03c1",
+      "\u0394\u03b5\u03c5",
+      "\u03a4\u03c1\u03af",
+      "\u03a4\u03b5\u03c4",
+      "\u03a0\u03ad\u03bc",
+      "\u03a0\u03b1\u03c1",
+      "\u03a3\u03ac\u03b2"
+    ],
+    "SHORTMONTH": [
+      "\u0399\u03b1\u03bd",
+      "\u03a6\u03b5\u03b2",
+      "\u039c\u03b1\u03c1",
+      "\u0391\u03c0\u03c1",
+      "\u039c\u03b1\u0390",
+      "\u0399\u03bf\u03c5\u03bd",
+      "\u0399\u03bf\u03c5\u03bb",
+      "\u0391\u03c5\u03b3",
+      "\u03a3\u03b5\u03c0",
+      "\u039f\u03ba\u03c4",
+      "\u039d\u03bf\u03b5",
+      "\u0394\u03b5\u03ba"
+    ],
+    "STANDALONEMONTH": [
+      "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+      "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+      "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2",
+      "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2",
+      "\u039c\u03ac\u03b9\u03bf\u03c2",
+      "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2",
+      "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2",
+      "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2",
+      "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "el-gr",
+  "localeID": "el_GR",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el.js
new file mode 100644
index 0000000..0cfa775
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_el.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u03c0.\u03bc.",
+      "\u03bc.\u03bc."
+    ],
+    "DAY": [
+      "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+      "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+      "\u03a4\u03c1\u03af\u03c4\u03b7",
+      "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+      "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+      "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+      "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"
+    ],
+    "ERANAMES": [
+      "\u03c0\u03c1\u03bf \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd",
+      "\u03bc\u03b5\u03c4\u03ac \u03a7\u03c1\u03b9\u03c3\u03c4\u03cc\u03bd"
+    ],
+    "ERAS": [
+      "\u03c0.\u03a7.",
+      "\u03bc.\u03a7."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+      "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+      "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5",
+      "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5",
+      "\u039c\u03b1\u0390\u03bf\u03c5",
+      "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5",
+      "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5",
+      "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5",
+      "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+      "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"
+    ],
+    "SHORTDAY": [
+      "\u039a\u03c5\u03c1",
+      "\u0394\u03b5\u03c5",
+      "\u03a4\u03c1\u03af",
+      "\u03a4\u03b5\u03c4",
+      "\u03a0\u03ad\u03bc",
+      "\u03a0\u03b1\u03c1",
+      "\u03a3\u03ac\u03b2"
+    ],
+    "SHORTMONTH": [
+      "\u0399\u03b1\u03bd",
+      "\u03a6\u03b5\u03b2",
+      "\u039c\u03b1\u03c1",
+      "\u0391\u03c0\u03c1",
+      "\u039c\u03b1\u0390",
+      "\u0399\u03bf\u03c5\u03bd",
+      "\u0399\u03bf\u03c5\u03bb",
+      "\u0391\u03c5\u03b3",
+      "\u03a3\u03b5\u03c0",
+      "\u039f\u03ba\u03c4",
+      "\u039d\u03bf\u03b5",
+      "\u0394\u03b5\u03ba"
+    ],
+    "STANDALONEMONTH": [
+      "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+      "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+      "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2",
+      "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2",
+      "\u039c\u03ac\u03b9\u03bf\u03c2",
+      "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2",
+      "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2",
+      "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2",
+      "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+      "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "el",
+  "localeID": "el",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[34/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eh.js
new file mode 100644
index 0000000..a1e4460
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-eh.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-eh",
+  "localeID": "ar_EH",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-er.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-er.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-er.js
new file mode 100644
index 0000000..edbbccd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-er.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-er",
+  "localeID": "ar_ER",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-il.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-il.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-il.js
new file mode 100644
index 0000000..7c1e4fd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-il.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20aa",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-il",
+  "localeID": "ar_IL",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-iq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-iq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-iq.js
new file mode 100644
index 0000000..4c26108
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-iq.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "STANDALONEMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-iq",
+  "localeID": "ar_IQ",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-jo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-jo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-jo.js
new file mode 100644
index 0000000..8bd5a66
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-jo.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "STANDALONEMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-jo",
+  "localeID": "ar_JO",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-km.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-km.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-km.js
new file mode 100644
index 0000000..00d205d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-km.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CF",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-km",
+  "localeID": "ar_KM",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-kw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-kw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-kw.js
new file mode 100644
index 0000000..c986311
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-kw.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-kw",
+  "localeID": "ar_KW",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-lb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-lb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-lb.js
new file mode 100644
index 0000000..2bb07fc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-lb.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "STANDALONEMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "L\u00a3",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-lb",
+  "localeID": "ar_LB",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ly.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ly.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ly.js
new file mode 100644
index 0000000..622bde2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ly.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-ly",
+  "localeID": "ar_LY",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ma.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ma.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ma.js
new file mode 100644
index 0000000..e00bfd7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ma.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648\u0632",
+      "\u063a\u0634\u062a",
+      "\u0634\u062a\u0646\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0646\u0628\u0631",
+      "\u062f\u062c\u0646\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648\u0632",
+      "\u063a\u0634\u062a",
+      "\u0634\u062a\u0646\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0646\u0628\u0631",
+      "\u062f\u062c\u0646\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648\u0632",
+      "\u063a\u0634\u062a",
+      "\u0634\u062a\u0646\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0646\u0628\u0631",
+      "\u062f\u062c\u0646\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-ma",
+  "localeID": "ar_MA",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-mr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-mr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-mr.js
new file mode 100644
index 0000000..259a617
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-mr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0625\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0634\u062a",
+      "\u0634\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u062c\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0625\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0634\u062a",
+      "\u0634\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u062c\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0625\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0634\u062a",
+      "\u0634\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u062c\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MRO",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-mr",
+  "localeID": "ar_MR",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-om.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-om.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-om.js
new file mode 100644
index 0000000..947fe89
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-om.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-om",
+  "localeID": "ar_OM",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ps.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ps.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ps.js
new file mode 100644
index 0000000..26baca0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ps.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "STANDALONEMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20aa",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-ps",
+  "localeID": "ar_PS",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-qa.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-qa.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-qa.js
new file mode 100644
index 0000000..7d9ea68
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-qa.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-qa",
+  "localeID": "ar_QA",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sa.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sa.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sa.js
new file mode 100644
index 0000000..5fb6653
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sa.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-sa",
+  "localeID": "ar_SA",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sd.js
new file mode 100644
index 0000000..e8c6494
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sd.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SDG",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-sd",
+  "localeID": "ar_SD",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-so.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-so.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-so.js
new file mode 100644
index 0000000..7ab6a54
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-so.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SOS",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-so",
+  "localeID": "ar_SO",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[02/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh-ma.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh-ma.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh-ma.js
new file mode 100644
index 0000000..70aaf85
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh-ma.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c",
+      "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c"
+    ],
+    "DAY": [
+      "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59",
+      "\u2d30\u2d62\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d55\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d61\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59"
+    ],
+    "ERANAMES": [
+      "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30",
+      "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30"
+    ],
+    "ERAS": [
+      "\u2d37\u2d30\u2d44",
+      "\u2d37\u2d3c\u2d44"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "SHORTDAY": [
+      "\u2d30\u2d59\u2d30",
+      "\u2d30\u2d62\u2d4f",
+      "\u2d30\u2d59\u2d49",
+      "\u2d30\u2d3d\u2d55",
+      "\u2d30\u2d3d\u2d61",
+      "\u2d30\u2d59\u2d49\u2d4e",
+      "\u2d30\u2d59\u2d49\u2d39"
+    ],
+    "SHORTMONTH": [
+      "\u2d49\u2d4f\u2d4f",
+      "\u2d31\u2d55\u2d30",
+      "\u2d4e\u2d30\u2d55",
+      "\u2d49\u2d31\u2d54",
+      "\u2d4e\u2d30\u2d62",
+      "\u2d62\u2d53\u2d4f",
+      "\u2d62\u2d53\u2d4d",
+      "\u2d56\u2d53\u2d5b",
+      "\u2d5b\u2d53\u2d5c",
+      "\u2d3d\u2d5c\u2d53",
+      "\u2d4f\u2d53\u2d61",
+      "\u2d37\u2d53\u2d4a"
+    ],
+    "STANDALONEMONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "zgh-ma",
+  "localeID": "zgh_MA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh.js
new file mode 100644
index 0000000..dc8b56a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zgh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c",
+      "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c"
+    ],
+    "DAY": [
+      "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59",
+      "\u2d30\u2d62\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d55\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d61\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59"
+    ],
+    "ERANAMES": [
+      "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30",
+      "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30"
+    ],
+    "ERAS": [
+      "\u2d37\u2d30\u2d44",
+      "\u2d37\u2d3c\u2d44"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "SHORTDAY": [
+      "\u2d30\u2d59\u2d30",
+      "\u2d30\u2d62\u2d4f",
+      "\u2d30\u2d59\u2d49",
+      "\u2d30\u2d3d\u2d55",
+      "\u2d30\u2d3d\u2d61",
+      "\u2d30\u2d59\u2d49\u2d4e",
+      "\u2d30\u2d59\u2d49\u2d39"
+    ],
+    "SHORTMONTH": [
+      "\u2d49\u2d4f\u2d4f",
+      "\u2d31\u2d55\u2d30",
+      "\u2d4e\u2d30\u2d55",
+      "\u2d49\u2d31\u2d54",
+      "\u2d4e\u2d30\u2d62",
+      "\u2d62\u2d53\u2d4f",
+      "\u2d62\u2d53\u2d4d",
+      "\u2d56\u2d53\u2d5b",
+      "\u2d5b\u2d53\u2d5c",
+      "\u2d3d\u2d5c\u2d53",
+      "\u2d4f\u2d53\u2d61",
+      "\u2d37\u2d53\u2d4a"
+    ],
+    "STANDALONEMONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "zgh",
+  "localeID": "zgh",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-cn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-cn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-cn.js
new file mode 100644
index 0000000..9dcded2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-cn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "SHORTDAY": [
+      "\u5468\u65e5",
+      "\u5468\u4e00",
+      "\u5468\u4e8c",
+      "\u5468\u4e09",
+      "\u5468\u56db",
+      "\u5468\u4e94",
+      "\u5468\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "yy/M/d ah:mm",
+    "shortDate": "yy/M/d",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-cn",
+  "localeID": "zh_CN",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-cn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-cn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-cn.js
new file mode 100644
index 0000000..9caf0a9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-cn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "SHORTDAY": [
+      "\u5468\u65e5",
+      "\u5468\u4e00",
+      "\u5468\u4e8c",
+      "\u5468\u4e09",
+      "\u5468\u56db",
+      "\u5468\u4e94",
+      "\u5468\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "yy/M/d ah:mm",
+    "shortDate": "yy/M/d",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hans-cn",
+  "localeID": "zh_Hans_CN",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-hk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-hk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-hk.js
new file mode 100644
index 0000000..f19d3ff
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-hk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "SHORTDAY": [
+      "\u5468\u65e5",
+      "\u5468\u4e00",
+      "\u5468\u4e8c",
+      "\u5468\u4e09",
+      "\u5468\u56db",
+      "\u5468\u4e94",
+      "\u5468\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "d/M/yy ah:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hans-hk",
+  "localeID": "zh_Hans_HK",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-mo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-mo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-mo.js
new file mode 100644
index 0000000..a5f5f6b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-mo.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "SHORTDAY": [
+      "\u5468\u65e5",
+      "\u5468\u4e00",
+      "\u5468\u4e8c",
+      "\u5468\u4e09",
+      "\u5468\u56db",
+      "\u5468\u4e94",
+      "\u5468\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "d/M/yy ah:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MOP",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hans-mo",
+  "localeID": "zh_Hans_MO",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-sg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-sg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-sg.js
new file mode 100644
index 0000000..9e9f6a4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans-sg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "SHORTDAY": [
+      "\u5468\u65e5",
+      "\u5468\u4e00",
+      "\u5468\u4e8c",
+      "\u5468\u4e09",
+      "\u5468\u56db",
+      "\u5468\u4e94",
+      "\u5468\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "dd/MM/yy ah:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hans-sg",
+  "localeID": "zh_Hans_SG",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans.js
new file mode 100644
index 0000000..8cc744e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hans.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "SHORTDAY": [
+      "\u5468\u65e5",
+      "\u5468\u4e00",
+      "\u5468\u4e8c",
+      "\u5468\u4e09",
+      "\u5468\u56db",
+      "\u5468\u4e94",
+      "\u5468\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "yy/M/d ah:mm",
+    "shortDate": "yy/M/d",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hans",
+  "localeID": "zh_Hans",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-hk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-hk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-hk.js
new file mode 100644
index 0000000..83afa08
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-hk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u9031\u65e5",
+      "\u9031\u4e00",
+      "\u9031\u4e8c",
+      "\u9031\u4e09",
+      "\u9031\u56db",
+      "\u9031\u4e94",
+      "\u9031\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "d/M/yy ah:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hant-hk",
+  "localeID": "zh_Hant_HK",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-mo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-mo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-mo.js
new file mode 100644
index 0000000..9e7dff0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-mo.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u9031\u65e5",
+      "\u9031\u4e00",
+      "\u9031\u4e8c",
+      "\u9031\u4e09",
+      "\u9031\u56db",
+      "\u9031\u4e94",
+      "\u9031\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "d/M/yy ah:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MOP",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hant-mo",
+  "localeID": "zh_Hant_MO",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-tw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-tw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-tw.js
new file mode 100644
index 0000000..870b74a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant-tw.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u897f\u5143\u524d",
+      "\u897f\u5143"
+    ],
+    "ERAS": [
+      "\u897f\u5143\u524d",
+      "\u897f\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u9031\u65e5",
+      "\u9031\u4e00",
+      "\u9031\u4e8c",
+      "\u9031\u4e09",
+      "\u9031\u56db",
+      "\u9031\u4e94",
+      "\u9031\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5 EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "y/M/d ah:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "NT$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hant-tw",
+  "localeID": "zh_Hant_TW",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant.js
new file mode 100644
index 0000000..38dbf14
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hant.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u897f\u5143\u524d",
+      "\u897f\u5143"
+    ],
+    "ERAS": [
+      "\u897f\u5143\u524d",
+      "\u897f\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u9031\u65e5",
+      "\u9031\u4e00",
+      "\u9031\u4e8c",
+      "\u9031\u4e09",
+      "\u9031\u56db",
+      "\u9031\u4e94",
+      "\u9031\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5 EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "y/M/d ah:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "NT$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hant",
+  "localeID": "zh_Hant",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hk.js
new file mode 100644
index 0000000..c6c3620
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-hk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u9031\u65e5",
+      "\u9031\u4e00",
+      "\u9031\u4e8c",
+      "\u9031\u4e09",
+      "\u9031\u56db",
+      "\u9031\u4e94",
+      "\u9031\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "d/M/yy ah:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-hk",
+  "localeID": "zh_HK",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-tw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-tw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-tw.js
new file mode 100644
index 0000000..53b1b3d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh-tw.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u897f\u5143\u524d",
+      "\u897f\u5143"
+    ],
+    "ERAS": [
+      "\u897f\u5143\u524d",
+      "\u897f\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "SHORTDAY": [
+      "\u9031\u65e5",
+      "\u9031\u4e00",
+      "\u9031\u4e8c",
+      "\u9031\u4e09",
+      "\u9031\u56db",
+      "\u9031\u4e94",
+      "\u9031\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5 EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "y/M/d ah:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "NT$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh-tw",
+  "localeID": "zh_TW",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh.js
new file mode 100644
index 0000000..41f05a8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zh.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u4e0a\u5348",
+      "\u4e0b\u5348"
+    ],
+    "DAY": [
+      "\u661f\u671f\u65e5",
+      "\u661f\u671f\u4e00",
+      "\u661f\u671f\u4e8c",
+      "\u661f\u671f\u4e09",
+      "\u661f\u671f\u56db",
+      "\u661f\u671f\u4e94",
+      "\u661f\u671f\u516d"
+    ],
+    "ERANAMES": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "ERAS": [
+      "\u516c\u5143\u524d",
+      "\u516c\u5143"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "SHORTDAY": [
+      "\u5468\u65e5",
+      "\u5468\u4e00",
+      "\u5468\u4e8c",
+      "\u5468\u4e09",
+      "\u5468\u56db",
+      "\u5468\u4e94",
+      "\u5468\u516d"
+    ],
+    "SHORTMONTH": [
+      "1\u6708",
+      "2\u6708",
+      "3\u6708",
+      "4\u6708",
+      "5\u6708",
+      "6\u6708",
+      "7\u6708",
+      "8\u6708",
+      "9\u6708",
+      "10\u6708",
+      "11\u6708",
+      "12\u6708"
+    ],
+    "STANDALONEMONTH": [
+      "\u4e00\u6708",
+      "\u4e8c\u6708",
+      "\u4e09\u6708",
+      "\u56db\u6708",
+      "\u4e94\u6708",
+      "\u516d\u6708",
+      "\u4e03\u6708",
+      "\u516b\u6708",
+      "\u4e5d\u6708",
+      "\u5341\u6708",
+      "\u5341\u4e00\u6708",
+      "\u5341\u4e8c\u6708"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+    "longDate": "y\u5e74M\u6708d\u65e5",
+    "medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
+    "mediumDate": "y\u5e74M\u6708d\u65e5",
+    "mediumTime": "ah:mm:ss",
+    "short": "yy/M/d ah:mm",
+    "shortDate": "yy/M/d",
+    "shortTime": "ah:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zh",
+  "localeID": "zh",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu-za.js
new file mode 100644
index 0000000..e11f8d4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu-za.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Ekuseni",
+      "Ntambama"
+    ],
+    "DAY": [
+      "Sonto",
+      "Msombuluko",
+      "Lwesibili",
+      "Lwesithathu",
+      "Lwesine",
+      "Lwesihlanu",
+      "Mgqibelo"
+    ],
+    "ERANAMES": [
+      "BC",
+      "AD"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januwari",
+      "Februwari",
+      "Mashi",
+      "Apreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Agasti",
+      "Septhemba",
+      "Okthoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mso",
+      "Bil",
+      "Tha",
+      "Sin",
+      "Hla",
+      "Mgq"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mas",
+      "Apr",
+      "Mey",
+      "Jun",
+      "Jul",
+      "Aga",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januwari",
+      "Februwari",
+      "Mashi",
+      "Apreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Agasti",
+      "Septhemba",
+      "Okthoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zu-za",
+  "localeID": "zu_ZA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu.js
new file mode 100644
index 0000000..50372f6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_zu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Ekuseni",
+      "Ntambama"
+    ],
+    "DAY": [
+      "Sonto",
+      "Msombuluko",
+      "Lwesibili",
+      "Lwesithathu",
+      "Lwesine",
+      "Lwesihlanu",
+      "Mgqibelo"
+    ],
+    "ERANAMES": [
+      "BC",
+      "AD"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januwari",
+      "Februwari",
+      "Mashi",
+      "Apreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Agasti",
+      "Septhemba",
+      "Okthoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mso",
+      "Bil",
+      "Tha",
+      "Sin",
+      "Hla",
+      "Mgq"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mas",
+      "Apr",
+      "Mey",
+      "Jun",
+      "Jul",
+      "Aga",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Januwari",
+      "Februwari",
+      "Mashi",
+      "Apreli",
+      "Meyi",
+      "Juni",
+      "Julayi",
+      "Agasti",
+      "Septhemba",
+      "Okthoba",
+      "Novemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "zu",
+  "localeID": "zu",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.json
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.json b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.json
new file mode 100644
index 0000000..ff1ac64
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.json
@@ -0,0 +1 @@
+{"raw":"v1.5.0","major":1,"minor":5,"patch":0,"prerelease":[],"build":[],"version":"1.5.0","codeName":"ennoblement-facilitation","full":"1.5.0","branch":"v1.5.x","cdn":{"raw":"v1.5.0-rc.2","major":1,"minor":5,"patch":0,"prerelease":["rc",2],"build":[],"version":"1.5.0-rc.2","docsUrl":"http://code.angularjs.org/1.5.0-rc.2/docs"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.txt
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.txt b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.txt
new file mode 100644
index 0000000..3e1ad72
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/version.txt
@@ -0,0 +1 @@
+1.5.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/services/DataService.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/services/DataService.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/services/DataService.js
new file mode 100644
index 0000000..9a8daf1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/services/DataService.js
@@ -0,0 +1,74 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+(function() {
+    'use strict';
+
+    angular
+        .module('app')
+        .factory('DataService', DataService);
+
+    function DataService($http, $log, $q) {
+
+        /** Object to manage all backend URL's */
+        var urls = {
+            projects : "data/projects"
+        };
+
+        /** The DataService with all public methods */
+        var service = {
+            getProjects: getProjects
+        };
+
+        return service;
+
+        /** Get all projects */
+        function getProjects() {
+            return _request(urls.projects);
+        }
+
+
+        /** A generic helper method to execute a HTTP request to the backend */
+        function _request(url, method, model){
+            var def = $q.defer(),
+                req = {
+                method: method,
+                url: url
+            };
+
+            if(!method) {
+                req.method = 'GET';
+            }
+
+            if(model) {
+                req.data = model;
+            }
+            $http(req).success(function(data) {
+                def.resolve(data);
+            }).error(function(data, code) {
+                def.reject(data);
+                $log.error(data, code);
+            });
+            return def.promise;
+        }
+
+    }
+
+})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/home.html
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/home.html b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/home.html
new file mode 100644
index 0000000..239f4ea
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/home.html
@@ -0,0 +1,6 @@
+<h1>Hello, {{vm.name}}.</h1>
+
+<p>
+    Not your name?
+    <input type="text" ng-model="vm.name" />
+</p>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/projects.html
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/projects.html b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/projects.html
new file mode 100644
index 0000000..12f4655
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/partials/projects.html
@@ -0,0 +1,3 @@
+<ul>
+    <li ng-repeat="project in vm.projects">{{project}}</li>
+</ul>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/test/java/actions/IndexTest.java
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/test/java/actions/IndexTest.java b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/test/java/actions/IndexTest.java
new file mode 100644
index 0000000..dde937a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/test/java/actions/IndexTest.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package ${package}.actions;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.StrutsRestTestCase;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class IndexTest extends StrutsRestTestCase<Index> {
+
+    @Test
+    public void testIndex() throws Exception {
+        Index index = new Index();
+        String result = index.execute();
+        assertTrue("Expected a success result!", ActionSupport.SUCCESS.equals(result));
+        assertFalse(index.isUseMinifiedResources());
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-blank/README.txt
----------------------------------------------------------------------
diff --git a/struts2-archetype-blank/README.txt b/struts2-archetype-blank/README.txt
new file mode 100644
index 0000000..3fd80bb
--- /dev/null
+++ b/struts2-archetype-blank/README.txt
@@ -0,0 +1,61 @@
+INFORMATION
+===========
+- This is Struts 2's "Blank" Maven Archetype
+
+USAGE
+=====
+
+- change directory to where the web app template is to be created,
+  for example, a 'projects' directory (which you may need to create):
+  
+     cd /home/tmjee/projects
+  
+- run the following command to generate the sample web app template, assuming :-
+    - root java package -> com.myCompany.mySystem
+
+    - the webapp war name   ->  myWebApp
+
+
+mvn archetype:generate -B -DgroupId=com.mycompany.mysystem \
+							-DartifactId=myWebApp \
+							-DarchetypeGroupId=org.apache.struts \
+							-DarchetypeArtifactId=struts2-archetype-blank \
+							-DarchetypeVersion=<CURRENT_STRUTS_VERSION> \
+							-DremoteRepositories=http://struts.apache.org
+
+
+For more details about the Struts2 archetypes, please take a look at our Wiki page.
+
+-> https://cwiki.apache.org/confluence/display/WW/Struts+2+Maven+Archetypes
+
+
+IMPORTANT:
+==========
+- The generated template uses the 'example' package, regardless of what you
+specify during mvn archetype:create.
+
+Unfortunately, the Maven Archetype plugin does not currently provide a way to
+move resource files into a package structure.
+
+- to compile, execute
+  mvn compile
+
+- to run test cases execute
+  mvn test
+
+- to clean execute
+  mvn clean
+
+- to package execute 
+  mvn package
+
+- to start it with jetty6 execute
+  mvn jetty:run
+
+I18N:
+=====
+Please note that this project was created with the assumption that it will be run
+in an environment where the default locale is set to English. This means that
+the default messages defined in package.properties are in English. If the default
+locale for your server is different, then rename package.properties to package_en.properties
+and create a new package.properties with proper values for your default locale.

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-blank/pom.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-blank/pom.xml b/struts2-archetype-blank/pom.xml
new file mode 100644
index 0000000..ee2998c
--- /dev/null
+++ b/struts2-archetype-blank/pom.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <groupId>org.apache.struts</groupId>
+        <artifactId>struts-archetypes</artifactId>
+        <version>2.5.3-SNAPSHOT</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>struts2-archetype-blank</artifactId>
+    <packaging>jar</packaging>
+    <name>Struts 2 Archetypes - Blank</name>
+
+    <properties>
+        <maven.test.skip>true</maven.test.skip>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/*.*</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources/archetype-resources/src</directory>
+                <filtering>false</filtering>
+                <includes>
+                    <include>**/*.*</include>
+                </includes>
+            </resource>
+        </resources>
+
+        <extensions>
+            <extension>
+                <groupId>org.apache.maven.archetype</groupId>
+                <artifactId>archetype-packaging</artifactId>
+                <version>2.0</version>
+            </extension>
+        </extensions>
+
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-resources-plugin</artifactId>
+                    <version>2.5</version>
+                    <configuration>
+                        <escapeString>\</escapeString>
+                        <encoding>UTF-8</encoding>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-archetype-plugin</artifactId>
+                    <version>2.0</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>release</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>sign-artifacts</id>
+                                <phase>verify</phase>
+                                <goals>
+                                    <goal>sign</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype-metadata.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype-metadata.xml b/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype-metadata.xml
new file mode 100644
index 0000000..f1bca37
--- /dev/null
+++ b/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archetype-descriptor name="struts2-archetype-blank">
+    <fileSets>
+        <fileSet filtered="true" packaged="true">
+            <directory>src/main/java</directory>
+            <includes>
+                <include>**/*.java</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="true" packaged="true">
+            <directory>src/test/java</directory>
+            <includes>
+                <include>**/*.java</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="true">
+            <directory>src/main/resources</directory>
+            <includes>
+                <include>**/*package*.properties</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="true">
+            <directory>src/main/resources</directory>
+            <includes>
+                <include>**/*-validation.xml</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="true" packaged="false">
+            <directory>src/main/resources</directory>
+            <includes>
+                <include>**/struts.xml</include>
+                <include>**/log4j2.xml</include>
+                <include>**/example.xml</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="false">
+            <directory>src/main/webapp/WEB-INF/example</directory>
+            <includes>
+                <include>**/*.jsp</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="false">
+            <directory>src/main/webapp</directory>
+            <includes>
+                <include>**/index.html</include>
+            </includes>
+        </fileSet>
+
+        <fileSet filtered="false" packaged="false">
+            <directory>src/main/webapp/WEB-INF</directory>
+            <includes>
+                <include>**/web.xml</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+</archetype-descriptor>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype.xml b/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype.xml
new file mode 100644
index 0000000..2fd544f
--- /dev/null
+++ b/struts2-archetype-blank/src/main/resources/META-INF/maven/archetype.xml
@@ -0,0 +1,39 @@
+<archetype
+    xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0 http://maven.apache.org/xsd/archetype-1.0.0.xsd"
+>
+  <id>struts2-archetype-blank</id>
+
+<!--  
+  <sources>
+    <source>src/main/java/example/ExampleSupport.java</source>
+    <source>src/main/java/example/HelloWorld.java</source>
+    <source>src/main/java/example/Login.java</source>
+  </sources>
+  
+  <resources>
+  	<resource>src/main/resources/example/Login-validation.xml</resource>
+  	<resource filtered="false">src/main/resources/example/package.properties</resource>
+  	<resource filtered="false">src/main/resources/example/package_es.properties</resource>
+  
+  	<resource>src/main/resources/example.xml</resource>
+  	<resource>src/main/resources/struts.xml</resource>
+
+    <resource>src/main/webapp/index.html</resource>
+    <resource>src/main/webapp/example/HelloWorld.jsp</resource>
+    <resource>src/main/webapp/example/Login.jsp</resource>
+    <resource>src/main/webapp/example/Menu.jsp</resource>
+    <resource>src/main/webapp/example/Missing.jsp</resource>
+    <resource>src/main/webapp/example/Register.jsp</resource>
+    <resource>src/main/webapp/example/Welcome.jsp</resource>
+    <resource>src/main/webapp/WEB-INF/web.xml</resource>
+  </resources>
+  
+  <testSources>
+    <source>src/test/java/example/ConfigTest.java</source>
+    <source>src/test/java/example/HelloWorldTest.java</source>
+    <source>src/test/java/example/LoginTest.java</source>
+  </testSources>
+-->
+</archetype>


[33/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ss.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ss.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ss.js
new file mode 100644
index 0000000..c5afc29
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ss.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-ss",
+  "localeID": "ar_SS",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sy.js
new file mode 100644
index 0000000..9ddd6ad
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-sy.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "STANDALONEMONTH": [
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0634\u0628\u0627\u0637",
+      "\u0622\u0630\u0627\u0631",
+      "\u0646\u064a\u0633\u0627\u0646",
+      "\u0623\u064a\u0627\u0631",
+      "\u062d\u0632\u064a\u0631\u0627\u0646",
+      "\u062a\u0645\u0648\u0632",
+      "\u0622\u0628",
+      "\u0623\u064a\u0644\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+      "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+      "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-sy",
+  "localeID": "ar_SY",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-td.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-td.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-td.js
new file mode 100644
index 0000000..b28152a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-td.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-td",
+  "localeID": "ar_TD",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-tn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-tn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-tn.js
new file mode 100644
index 0000000..eaba505
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-tn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u062c\u0627\u0646\u0641\u064a",
+      "\u0641\u064a\u0641\u0631\u064a",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0641\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u062c\u0648\u0627\u0646",
+      "\u062c\u0648\u064a\u0644\u064a\u0629",
+      "\u0623\u0648\u062a",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0627\u0646\u0641\u064a",
+      "\u0641\u064a\u0641\u0631\u064a",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0641\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u062c\u0648\u0627\u0646",
+      "\u062c\u0648\u064a\u0644\u064a\u0629",
+      "\u0623\u0648\u062a",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0627\u0646\u0641\u064a",
+      "\u0641\u064a\u0641\u0631\u064a",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0641\u0631\u064a\u0644",
+      "\u0645\u0627\u064a",
+      "\u062c\u0648\u0627\u0646",
+      "\u062c\u0648\u064a\u0644\u064a\u0629",
+      "\u0623\u0648\u062a",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-tn",
+  "localeID": "ar_TN",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ye.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ye.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ye.js
new file mode 100644
index 0000000..b0d8356
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar-ye.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rial",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar-ye",
+  "localeID": "ar_YE",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar.js
new file mode 100644
index 0000000..1ac223a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ar.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0635",
+      "\u0645"
+    ],
+    "DAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f",
+      "\u0645\u064a\u0644\u0627\u062f\u064a"
+    ],
+    "ERAS": [
+      "\u0642.\u0645",
+      "\u0645"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u0644\u0623\u062d\u062f",
+      "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+      "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+      "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+      "\u0627\u0644\u062e\u0645\u064a\u0633",
+      "\u0627\u0644\u062c\u0645\u0639\u0629",
+      "\u0627\u0644\u0633\u0628\u062a"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0646\u0627\u064a\u0631",
+      "\u0641\u0628\u0631\u0627\u064a\u0631",
+      "\u0645\u0627\u0631\u0633",
+      "\u0623\u0628\u0631\u064a\u0644",
+      "\u0645\u0627\u064a\u0648",
+      "\u064a\u0648\u0646\u064a\u0648",
+      "\u064a\u0648\u0644\u064a\u0648",
+      "\u0623\u063a\u0633\u0637\u0633",
+      "\u0633\u0628\u062a\u0645\u0628\u0631",
+      "\u0623\u0643\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0641\u0645\u0628\u0631",
+      "\u062f\u064a\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE\u060c d MMMM\u060c y",
+    "longDate": "d MMMM\u060c y",
+    "medium": "dd\u200f/MM\u200f/y h:mm:ss a",
+    "mediumDate": "dd\u200f/MM\u200f/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d\u200f/M\u200f/y h:mm a",
+    "shortDate": "d\u200f/M\u200f/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ar",
+  "localeID": "ar",
+  "pluralCat": function(n, opt_precision) {  if (n == 0) {    return PLURAL_CATEGORY.ZERO;  }  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  if (n == 2) {    return PLURAL_CATEGORY.TWO;  }  if (n % 100 >= 3 && n % 100 <= 10) {    return PLURAL_CATEGORY.FEW;  }  if (n % 100 >= 11 && n % 100 <= 99) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as-in.js
new file mode 100644
index 0000000..a7beeab
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as-in.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u09aa\u09c2\u09f0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3",
+      "\u0985\u09aa\u09f0\u09be\u09b9\u09cd\u09a3"
+    ],
+    "DAY": [
+      "\u09a6\u09c7\u0993\u09ac\u09be\u09f0",
+      "\u09b8\u09cb\u09ae\u09ac\u09be\u09f0",
+      "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09f0",
+      "\u09ac\u09c1\u09a7\u09ac\u09be\u09f0",
+      "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09f0",
+      "\u09b6\u09c1\u0995\u09cd\u09f0\u09ac\u09be\u09f0",
+      "\u09b6\u09a8\u09bf\u09ac\u09be\u09f0"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ae\u09be\u09f0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b7\u09cd\u099f",
+      "\u099b\u09c7\u09aa\u09cd\u09a4\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09f0",
+      "\u09a8\u09f1\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u09a1\u09bf\u099a\u09c7\u09ae\u09cd\u09ac\u09f0"
+    ],
+    "SHORTDAY": [
+      "\u09f0\u09ac\u09bf",
+      "\u09b8\u09cb\u09ae",
+      "\u09ae\u0999\u09cd\u0997\u09b2",
+      "\u09ac\u09c1\u09a7",
+      "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf",
+      "\u09b6\u09c1\u0995\u09cd\u09f0",
+      "\u09b6\u09a8\u09bf"
+    ],
+    "SHORTMONTH": [
+      "\u099c\u09be\u09a8\u09c1",
+      "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1",
+      "\u09ae\u09be\u09f0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997",
+      "\u09b8\u09c7\u09aa\u09cd\u099f",
+      "\u0985\u0995\u09cd\u099f\u09cb",
+      "\u09a8\u09ad\u09c7",
+      "\u09a1\u09bf\u09b8\u09c7"
+    ],
+    "STANDALONEMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ae\u09be\u09f0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b7\u09cd\u099f",
+      "\u099b\u09c7\u09aa\u09cd\u09a4\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09f0",
+      "\u09a8\u09f1\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u09a1\u09bf\u099a\u09c7\u09ae\u09cd\u09ac\u09f0"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "dd-MM-y h.mm.ss a",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "h.mm.ss a",
+    "short": "d-M-y h.mm. a",
+    "shortDate": "d-M-y",
+    "shortTime": "h.mm. a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "as-in",
+  "localeID": "as_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as.js
new file mode 100644
index 0000000..6c4fd51
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_as.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u09aa\u09c2\u09f0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3",
+      "\u0985\u09aa\u09f0\u09be\u09b9\u09cd\u09a3"
+    ],
+    "DAY": [
+      "\u09a6\u09c7\u0993\u09ac\u09be\u09f0",
+      "\u09b8\u09cb\u09ae\u09ac\u09be\u09f0",
+      "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09f0",
+      "\u09ac\u09c1\u09a7\u09ac\u09be\u09f0",
+      "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09f0",
+      "\u09b6\u09c1\u0995\u09cd\u09f0\u09ac\u09be\u09f0",
+      "\u09b6\u09a8\u09bf\u09ac\u09be\u09f0"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ae\u09be\u09f0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b7\u09cd\u099f",
+      "\u099b\u09c7\u09aa\u09cd\u09a4\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09f0",
+      "\u09a8\u09f1\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u09a1\u09bf\u099a\u09c7\u09ae\u09cd\u09ac\u09f0"
+    ],
+    "SHORTDAY": [
+      "\u09f0\u09ac\u09bf",
+      "\u09b8\u09cb\u09ae",
+      "\u09ae\u0999\u09cd\u0997\u09b2",
+      "\u09ac\u09c1\u09a7",
+      "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf",
+      "\u09b6\u09c1\u0995\u09cd\u09f0",
+      "\u09b6\u09a8\u09bf"
+    ],
+    "SHORTMONTH": [
+      "\u099c\u09be\u09a8\u09c1",
+      "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1",
+      "\u09ae\u09be\u09f0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997",
+      "\u09b8\u09c7\u09aa\u09cd\u099f",
+      "\u0985\u0995\u09cd\u099f\u09cb",
+      "\u09a8\u09ad\u09c7",
+      "\u09a1\u09bf\u09b8\u09c7"
+    ],
+    "STANDALONEMONTH": [
+      "\u099c\u09be\u09a8\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ab\u09c7\u09ac\u09cd\u09f0\u09c1\u09f1\u09be\u09f0\u09c0",
+      "\u09ae\u09be\u09f0\u09cd\u099a",
+      "\u098f\u09aa\u09cd\u09f0\u09bf\u09b2",
+      "\u09ae\u09c7",
+      "\u099c\u09c1\u09a8",
+      "\u099c\u09c1\u09b2\u09be\u0987",
+      "\u0986\u0997\u09b7\u09cd\u099f",
+      "\u099b\u09c7\u09aa\u09cd\u09a4\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09f0",
+      "\u09a8\u09f1\u09c7\u09ae\u09cd\u09ac\u09f0",
+      "\u09a1\u09bf\u099a\u09c7\u09ae\u09cd\u09ac\u09f0"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "dd-MM-y h.mm.ss a",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "h.mm.ss a",
+    "short": "d-M-y h.mm. a",
+    "shortDate": "d-M-y",
+    "shortTime": "h.mm. a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "as",
+  "localeID": "as",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa-tz.js
new file mode 100644
index 0000000..8bff725
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "icheheavo",
+      "ichamthi"
+    ],
+    "DAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla yakwe Yethu",
+      "Baada yakwe Yethu"
+    ],
+    "ERAS": [
+      "KM",
+      "BM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Ijm",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "asa-tz",
+  "localeID": "asa_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa.js
new file mode 100644
index 0000000..c6e4c17
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_asa.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "icheheavo",
+      "ichamthi"
+    ],
+    "DAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla yakwe Yethu",
+      "Baada yakwe Yethu"
+    ],
+    "ERAS": [
+      "KM",
+      "BM"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Ijm",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "asa",
+  "localeID": "asa",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast-es.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast-es.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast-es.js
new file mode 100644
index 0000000..7d429d6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast-es.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domingu",
+      "llunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "xueves",
+      "vienres",
+      "s\u00e1badu"
+    ],
+    "ERANAMES": [
+      "a.C.",
+      "d.C."
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de xineru",
+      "de febreru",
+      "de marzu",
+      "d\u2019abril",
+      "de mayu",
+      "de xunu",
+      "de xunetu",
+      "d\u2019agostu",
+      "de setiembre",
+      "d\u2019ochobre",
+      "de payares",
+      "d\u2019avientu"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "llu",
+      "mar",
+      "mie",
+      "xue",
+      "vie",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "xin",
+      "feb",
+      "mar",
+      "abr",
+      "may",
+      "xun",
+      "xnt",
+      "ago",
+      "set",
+      "och",
+      "pay",
+      "avi"
+    ],
+    "STANDALONEMONTH": [
+      "xineru",
+      "febreru",
+      "marzu",
+      "abril",
+      "mayu",
+      "xunu",
+      "xunetu",
+      "agostu",
+      "setiembre",
+      "ochobre",
+      "payares",
+      "avientu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ast-es",
+  "localeID": "ast_ES",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast.js
new file mode 100644
index 0000000..38058bc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ast.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domingu",
+      "llunes",
+      "martes",
+      "mi\u00e9rcoles",
+      "xueves",
+      "vienres",
+      "s\u00e1badu"
+    ],
+    "ERANAMES": [
+      "a.C.",
+      "d.C."
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de xineru",
+      "de febreru",
+      "de marzu",
+      "d\u2019abril",
+      "de mayu",
+      "de xunu",
+      "de xunetu",
+      "d\u2019agostu",
+      "de setiembre",
+      "d\u2019ochobre",
+      "de payares",
+      "d\u2019avientu"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "llu",
+      "mar",
+      "mie",
+      "xue",
+      "vie",
+      "sab"
+    ],
+    "SHORTMONTH": [
+      "xin",
+      "feb",
+      "mar",
+      "abr",
+      "may",
+      "xun",
+      "xnt",
+      "ago",
+      "set",
+      "och",
+      "pay",
+      "avi"
+    ],
+    "STANDALONEMONTH": [
+      "xineru",
+      "febreru",
+      "marzu",
+      "abril",
+      "mayu",
+      "xunu",
+      "xunetu",
+      "agostu",
+      "setiembre",
+      "ochobre",
+      "payares",
+      "avientu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ast",
+  "localeID": "ast",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl-az.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl-az.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl-az.js
new file mode 100644
index 0000000..83075e7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl-az.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0431\u0430\u0437\u0430\u0440",
+      "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9",
+      "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u04b9\u04af\u043c\u04d9",
+      "\u0448\u04d9\u043d\u0431\u04d9"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0432\u0430\u0440",
+      "\u0444\u0435\u0432\u0440\u0430\u043b",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b",
+      "\u043c\u0430\u0439",
+      "\u0438\u0458\u0443\u043d",
+      "\u0438\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
+      "\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
+      "\u043d\u043e\u0458\u0430\u0431\u0440",
+      "\u0434\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "SHORTDAY": [
+      "\u0431\u0430\u0437\u0430\u0440",
+      "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9",
+      "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u04b9\u04af\u043c\u04d9",
+      "\u0448\u04d9\u043d\u0431\u04d9"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d\u0432\u0430\u0440",
+      "\u0444\u0435\u0432\u0440\u0430\u043b",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b",
+      "\u043c\u0430\u0439",
+      "\u0438\u0458\u0443\u043d",
+      "\u0438\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
+      "\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
+      "\u043d\u043e\u0458\u0430\u0431\u0440",
+      "\u0434\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0432\u0430\u0440",
+      "\u0444\u0435\u0432\u0440\u0430\u043b",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b",
+      "\u043c\u0430\u0439",
+      "\u0438\u0458\u0443\u043d",
+      "\u0438\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
+      "\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
+      "\u043d\u043e\u0458\u0430\u0431\u0440",
+      "\u0434\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d, MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "man.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "az-cyrl-az",
+  "localeID": "az_Cyrl_AZ",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl.js
new file mode 100644
index 0000000..256f4e3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-cyrl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0431\u0430\u0437\u0430\u0440",
+      "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9",
+      "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u04b9\u04af\u043c\u04d9",
+      "\u0448\u04d9\u043d\u0431\u04d9"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0432\u0430\u0440",
+      "\u0444\u0435\u0432\u0440\u0430\u043b",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b",
+      "\u043c\u0430\u0439",
+      "\u0438\u0458\u0443\u043d",
+      "\u0438\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
+      "\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
+      "\u043d\u043e\u0458\u0430\u0431\u0440",
+      "\u0434\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "SHORTDAY": [
+      "\u0431\u0430\u0437\u0430\u0440",
+      "\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9",
+      "\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
+      "\u04b9\u04af\u043c\u04d9",
+      "\u0448\u04d9\u043d\u0431\u04d9"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d\u0432\u0430\u0440",
+      "\u0444\u0435\u0432\u0440\u0430\u043b",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b",
+      "\u043c\u0430\u0439",
+      "\u0438\u0458\u0443\u043d",
+      "\u0438\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
+      "\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
+      "\u043d\u043e\u0458\u0430\u0431\u0440",
+      "\u0434\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0432\u0430\u0440",
+      "\u0444\u0435\u0432\u0440\u0430\u043b",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b",
+      "\u043c\u0430\u0439",
+      "\u0438\u0458\u0443\u043d",
+      "\u0438\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
+      "\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
+      "\u043d\u043e\u0458\u0430\u0431\u0440",
+      "\u0434\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d, MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "man.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "az-cyrl",
+  "localeID": "az_Cyrl",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn-az.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn-az.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn-az.js
new file mode 100644
index 0000000..8daf7b1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn-az.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "bazar",
+      "bazar ert\u0259si",
+      "\u00e7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131",
+      "\u00e7\u0259r\u015f\u0259nb\u0259",
+      "c\u00fcm\u0259 ax\u015fam\u0131",
+      "c\u00fcm\u0259",
+      "\u015f\u0259nb\u0259"
+    ],
+    "ERANAMES": [
+      "eram\u0131zdan \u0259vv\u0259l",
+      "bizim eram\u0131z\u0131n"
+    ],
+    "ERAS": [
+      "e.\u0259.",
+      "b.e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "yanvar",
+      "fevral",
+      "mart",
+      "aprel",
+      "may",
+      "iyun",
+      "iyul",
+      "avqust",
+      "sentyabr",
+      "oktyabr",
+      "noyabr",
+      "dekabr"
+    ],
+    "SHORTDAY": [
+      "B.",
+      "B.E.",
+      "\u00c7.A.",
+      "\u00c7.",
+      "C.A.",
+      "C.",
+      "\u015e."
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fev",
+      "mar",
+      "apr",
+      "may",
+      "iyn",
+      "iyl",
+      "avq",
+      "sen",
+      "okt",
+      "noy",
+      "dek"
+    ],
+    "STANDALONEMONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "\u0130yun",
+      "\u0130yul",
+      "Avqust",
+      "Sentyabr",
+      "Oktyabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "d MMMM y, EEEE",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "man.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "az-latn-az",
+  "localeID": "az_Latn_AZ",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn.js
new file mode 100644
index 0000000..145c3c3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az-latn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "bazar",
+      "bazar ert\u0259si",
+      "\u00e7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131",
+      "\u00e7\u0259r\u015f\u0259nb\u0259",
+      "c\u00fcm\u0259 ax\u015fam\u0131",
+      "c\u00fcm\u0259",
+      "\u015f\u0259nb\u0259"
+    ],
+    "ERANAMES": [
+      "eram\u0131zdan \u0259vv\u0259l",
+      "bizim eram\u0131z\u0131n"
+    ],
+    "ERAS": [
+      "e.\u0259.",
+      "b.e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "yanvar",
+      "fevral",
+      "mart",
+      "aprel",
+      "may",
+      "iyun",
+      "iyul",
+      "avqust",
+      "sentyabr",
+      "oktyabr",
+      "noyabr",
+      "dekabr"
+    ],
+    "SHORTDAY": [
+      "B.",
+      "B.E.",
+      "\u00c7.A.",
+      "\u00c7.",
+      "C.A.",
+      "C.",
+      "\u015e."
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fev",
+      "mar",
+      "apr",
+      "may",
+      "iyn",
+      "iyl",
+      "avq",
+      "sen",
+      "okt",
+      "noy",
+      "dek"
+    ],
+    "STANDALONEMONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "\u0130yun",
+      "\u0130yul",
+      "Avqust",
+      "Sentyabr",
+      "Oktyabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "d MMMM y, EEEE",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "man.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "az-latn",
+  "localeID": "az_Latn",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az.js
new file mode 100644
index 0000000..84791b3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_az.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "bazar",
+      "bazar ert\u0259si",
+      "\u00e7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131",
+      "\u00e7\u0259r\u015f\u0259nb\u0259",
+      "c\u00fcm\u0259 ax\u015fam\u0131",
+      "c\u00fcm\u0259",
+      "\u015f\u0259nb\u0259"
+    ],
+    "ERANAMES": [
+      "eram\u0131zdan \u0259vv\u0259l",
+      "bizim eram\u0131z\u0131n"
+    ],
+    "ERAS": [
+      "e.\u0259.",
+      "b.e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "yanvar",
+      "fevral",
+      "mart",
+      "aprel",
+      "may",
+      "iyun",
+      "iyul",
+      "avqust",
+      "sentyabr",
+      "oktyabr",
+      "noyabr",
+      "dekabr"
+    ],
+    "SHORTDAY": [
+      "B.",
+      "B.E.",
+      "\u00c7.A.",
+      "\u00c7.",
+      "C.A.",
+      "C.",
+      "\u015e."
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fev",
+      "mar",
+      "apr",
+      "may",
+      "iyn",
+      "iyl",
+      "avq",
+      "sen",
+      "okt",
+      "noy",
+      "dek"
+    ],
+    "STANDALONEMONTH": [
+      "Yanvar",
+      "Fevral",
+      "Mart",
+      "Aprel",
+      "May",
+      "\u0130yun",
+      "\u0130yul",
+      "Avqust",
+      "Sentyabr",
+      "Oktyabr",
+      "Noyabr",
+      "Dekabr"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "d MMMM y, EEEE",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "man.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "az",
+  "localeID": "az",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas-cm.js
new file mode 100644
index 0000000..0511efc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "I bik\u025b\u0302gl\u00e0",
+      "I \u0253ugaj\u0254p"
+    ],
+    "DAY": [
+      "\u014bgw\u00e0 n\u0254\u0302y",
+      "\u014bgw\u00e0 nja\u014bgumba",
+      "\u014bgw\u00e0 \u00fbm",
+      "\u014bgw\u00e0 \u014bg\u00ea",
+      "\u014bgw\u00e0 mb\u0254k",
+      "\u014bgw\u00e0 k\u0254\u0254",
+      "\u014bgw\u00e0 j\u00f4n"
+    ],
+    "ERANAMES": [
+      "bis\u016b bi Yes\u00f9 Kr\u01d0st\u00f2",
+      "i mb\u016bs Yes\u00f9 Kr\u01d0st\u00f2"
+    ],
+    "ERAS": [
+      "b.Y.K",
+      "m.Y.K"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "K\u0254nd\u0254\u014b",
+      "M\u00e0c\u025b\u0302l",
+      "M\u00e0t\u00f9mb",
+      "M\u00e0top",
+      "M\u0300puy\u025b",
+      "H\u00ecl\u00f2nd\u025b\u0300",
+      "Nj\u00e8b\u00e0",
+      "H\u00ecka\u014b",
+      "D\u00ecp\u0254\u0300s",
+      "B\u00ec\u00f2\u00f4m",
+      "M\u00e0y\u025bs\u00e8p",
+      "L\u00ecbuy li \u0144y\u00e8e"
+    ],
+    "SHORTDAY": [
+      "n\u0254y",
+      "nja",
+      "uum",
+      "\u014bge",
+      "mb\u0254",
+      "k\u0254\u0254",
+      "jon"
+    ],
+    "SHORTMONTH": [
+      "k\u0254n",
+      "mac",
+      "mat",
+      "mto",
+      "mpu",
+      "hil",
+      "nje",
+      "hik",
+      "dip",
+      "bio",
+      "may",
+      "li\u0253"
+    ],
+    "STANDALONEMONTH": [
+      "K\u0254nd\u0254\u014b",
+      "M\u00e0c\u025b\u0302l",
+      "M\u00e0t\u00f9mb",
+      "M\u00e0top",
+      "M\u0300puy\u025b",
+      "H\u00ecl\u00f2nd\u025b\u0300",
+      "Nj\u00e8b\u00e0",
+      "H\u00ecka\u014b",
+      "D\u00ecp\u0254\u0300s",
+      "B\u00ec\u00f2\u00f4m",
+      "M\u00e0y\u025bs\u00e8p",
+      "L\u00ecbuy li \u0144y\u00e8e"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bas-cm",
+  "localeID": "bas_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas.js
new file mode 100644
index 0000000..3bdcaed
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bas.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "I bik\u025b\u0302gl\u00e0",
+      "I \u0253ugaj\u0254p"
+    ],
+    "DAY": [
+      "\u014bgw\u00e0 n\u0254\u0302y",
+      "\u014bgw\u00e0 nja\u014bgumba",
+      "\u014bgw\u00e0 \u00fbm",
+      "\u014bgw\u00e0 \u014bg\u00ea",
+      "\u014bgw\u00e0 mb\u0254k",
+      "\u014bgw\u00e0 k\u0254\u0254",
+      "\u014bgw\u00e0 j\u00f4n"
+    ],
+    "ERANAMES": [
+      "bis\u016b bi Yes\u00f9 Kr\u01d0st\u00f2",
+      "i mb\u016bs Yes\u00f9 Kr\u01d0st\u00f2"
+    ],
+    "ERAS": [
+      "b.Y.K",
+      "m.Y.K"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "K\u0254nd\u0254\u014b",
+      "M\u00e0c\u025b\u0302l",
+      "M\u00e0t\u00f9mb",
+      "M\u00e0top",
+      "M\u0300puy\u025b",
+      "H\u00ecl\u00f2nd\u025b\u0300",
+      "Nj\u00e8b\u00e0",
+      "H\u00ecka\u014b",
+      "D\u00ecp\u0254\u0300s",
+      "B\u00ec\u00f2\u00f4m",
+      "M\u00e0y\u025bs\u00e8p",
+      "L\u00ecbuy li \u0144y\u00e8e"
+    ],
+    "SHORTDAY": [
+      "n\u0254y",
+      "nja",
+      "uum",
+      "\u014bge",
+      "mb\u0254",
+      "k\u0254\u0254",
+      "jon"
+    ],
+    "SHORTMONTH": [
+      "k\u0254n",
+      "mac",
+      "mat",
+      "mto",
+      "mpu",
+      "hil",
+      "nje",
+      "hik",
+      "dip",
+      "bio",
+      "may",
+      "li\u0253"
+    ],
+    "STANDALONEMONTH": [
+      "K\u0254nd\u0254\u014b",
+      "M\u00e0c\u025b\u0302l",
+      "M\u00e0t\u00f9mb",
+      "M\u00e0top",
+      "M\u0300puy\u025b",
+      "H\u00ecl\u00f2nd\u025b\u0300",
+      "Nj\u00e8b\u00e0",
+      "H\u00ecka\u014b",
+      "D\u00ecp\u0254\u0300s",
+      "B\u00ec\u00f2\u00f4m",
+      "M\u00e0y\u025bs\u00e8p",
+      "L\u00ecbuy li \u0144y\u00e8e"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bas",
+  "localeID": "bas",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be-by.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be-by.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be-by.js
new file mode 100644
index 0000000..dd98e65
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_be-by.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0434\u0430 \u043f\u0430\u043b\u0443\u0434\u043d\u044f",
+      "\u043f\u0430\u0441\u043b\u044f \u043f\u0430\u043b\u0443\u0434\u043d\u044f"
+    ],
+    "DAY": [
+      "\u043d\u044f\u0434\u0437\u0435\u043b\u044f",
+      "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a",
+      "\u0430\u045e\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0435\u0440\u0430\u0434\u0430",
+      "\u0447\u0430\u0446\u0432\u0435\u0440",
+      "\u043f\u044f\u0442\u043d\u0456\u0446\u0430",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0434\u0430 \u043d.\u044d.",
+      "\u043d.\u044d."
+    ],
+    "ERAS": [
+      "\u0434\u0430 \u043d.\u044d.",
+      "\u043d.\u044d."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f",
+      "\u043b\u044e\u0442\u0430\u0433\u0430",
+      "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430",
+      "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430",
+      "\u043c\u0430\u044f",
+      "\u0447\u044d\u0440\u0432\u0435\u043d\u044f",
+      "\u043b\u0456\u043f\u0435\u043d\u044f",
+      "\u0436\u043d\u0456\u045e\u043d\u044f",
+      "\u0432\u0435\u0440\u0430\u0441\u043d\u044f",
+      "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430",
+      "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430",
+      "\u0441\u043d\u0435\u0436\u043d\u044f"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0434",
+      "\u043f\u043d",
+      "\u0430\u045e",
+      "\u0441\u0440",
+      "\u0447\u0446",
+      "\u043f\u0442",
+      "\u0441\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0441\u0442\u0443",
+      "\u043b\u044e\u0442",
+      "\u0441\u0430\u043a",
+      "\u043a\u0440\u0430",
+      "\u043c\u0430\u044f",
+      "\u0447\u044d\u0440",
+      "\u043b\u0456\u043f",
+      "\u0436\u043d\u0456",
+      "\u0432\u0435\u0440",
+      "\u043a\u0430\u0441",
+      "\u043b\u0456\u0441",
+      "\u0441\u043d\u0435"
+    ],
+    "STANDALONEMONTH": [
+      "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c",
+      "\u043b\u044e\u0442\u044b",
+      "\u0441\u0430\u043a\u0430\u0432\u0456\u043a",
+      "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a",
+      "\u043c\u0430\u0439",
+      "\u0447\u044d\u0440\u0432\u0435\u043d\u044c",
+      "\u043b\u0456\u043f\u0435\u043d\u044c",
+      "\u0436\u043d\u0456\u0432\u0435\u043d\u044c",
+      "\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c",
+      "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a",
+      "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434",
+      "\u0441\u043d\u0435\u0436\u0430\u043d\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d.M.y HH.mm.ss",
+    "mediumDate": "d.M.y",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy HH.mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "BYR",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "be-by",
+  "localeID": "be_BY",
+  "pluralCat": function(n, opt_precision) {  if (n % 10 == 1 && n % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (n % 10 == 0 || n % 10 >= 5 && n % 10 <= 9 || n % 100 >= 11 && n % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[45/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.js
new file mode 100644
index 0000000..0c3c6c1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.js
@@ -0,0 +1,980 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+// NOTE: ADVANCED_OPTIMIZATIONS mode.
+//
+// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using
+// constructs incompatible with that mode.
+
+var $interpolateMinErr = window['angular']['$interpolateMinErr'];
+
+var noop = window['angular']['noop'],
+    isFunction = window['angular']['isFunction'],
+    toJson = window['angular']['toJson'];
+
+function stringify(value) {
+  if (value == null /* null/undefined */) { return ''; }
+  switch (typeof value) {
+    case 'string':     return value;
+    case 'number':     return '' + value;
+    default:           return toJson(value);
+  }
+}
+
+// Convert an index into the string into line/column for use in error messages
+// As such, this doesn't have to be efficient.
+function indexToLineAndColumn(text, index) {
+  var lines = text.split(/\n/g);
+  for (var i=0; i < lines.length; i++) {
+    var line=lines[i];
+    if (index >= line.length) {
+      index -= line.length;
+    } else {
+      return { line: i + 1, column: index + 1 };
+    }
+  }
+}
+var PARSE_CACHE_FOR_TEXT_LITERALS = Object.create(null);
+
+function parseTextLiteral(text) {
+  var cachedFn = PARSE_CACHE_FOR_TEXT_LITERALS[text];
+  if (cachedFn != null) {
+    return cachedFn;
+  }
+  function parsedFn(context) { return text; }
+  parsedFn['$$watchDelegate'] = function watchDelegate(scope, listener, objectEquality) {
+    var unwatch = scope['$watch'](noop,
+        function textLiteralWatcher() {
+          if (isFunction(listener)) { listener.call(null, text, text, scope); }
+          unwatch();
+        },
+        objectEquality);
+    return unwatch;
+  };
+  PARSE_CACHE_FOR_TEXT_LITERALS[text] = parsedFn;
+  parsedFn['exp'] = text; // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js
+  parsedFn['expressions'] = []; // Require this to call $compile.$$addBindingInfo() which allows Protractor to find elements by binding.
+  return parsedFn;
+}
+
+function subtractOffset(expressionFn, offset) {
+  if (offset === 0) {
+    return expressionFn;
+  }
+  function minusOffset(value) {
+    return (value == void 0) ? value : value - offset;
+  }
+  function parsedFn(context) { return minusOffset(expressionFn(context)); }
+  var unwatch;
+  parsedFn['$$watchDelegate'] = function watchDelegate(scope, listener, objectEquality) {
+    unwatch = scope['$watch'](expressionFn,
+        function pluralExpressionWatchListener(newValue, oldValue) {
+          if (isFunction(listener)) { listener.call(null, minusOffset(newValue), minusOffset(oldValue), scope); }
+        },
+        objectEquality);
+    return unwatch;
+  };
+  return parsedFn;
+}
+
+// NOTE: ADVANCED_OPTIMIZATIONS mode.
+//
+// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using
+// constructs incompatible with that mode.
+
+/* global $interpolateMinErr: false */
+/* global isFunction: false */
+/* global noop: false */
+
+/**
+ * @constructor
+ * @private
+ */
+function MessageSelectorBase(expressionFn, choices) {
+  var self = this;
+  this.expressionFn = expressionFn;
+  this.choices = choices;
+  if (choices["other"] === void 0) {
+    throw $interpolateMinErr('reqother', '\u201cother\u201d is a required option.');
+  }
+  this.parsedFn = function(context) { return self.getResult(context); };
+  this.parsedFn['$$watchDelegate'] = function $$watchDelegate(scope, listener, objectEquality) {
+    return self.watchDelegate(scope, listener, objectEquality);
+  };
+  this.parsedFn['exp'] = expressionFn['exp'];
+  this.parsedFn['expressions'] = expressionFn['expressions'];
+}
+
+MessageSelectorBase.prototype.getMessageFn = function getMessageFn(value) {
+  return this.choices[this.categorizeValue(value)];
+};
+
+MessageSelectorBase.prototype.getResult = function getResult(context) {
+  return this.getMessageFn(this.expressionFn(context))(context);
+};
+
+MessageSelectorBase.prototype.watchDelegate = function watchDelegate(scope, listener, objectEquality) {
+  var watchers = new MessageSelectorWatchers(this, scope, listener, objectEquality);
+  return function() { watchers.cancelWatch(); };
+};
+
+/**
+ * @constructor
+ * @private
+ */
+function MessageSelectorWatchers(msgSelector, scope, listener, objectEquality) {
+  var self = this;
+  this.scope = scope;
+  this.msgSelector = msgSelector;
+  this.listener = listener;
+  this.objectEquality = objectEquality;
+  this.lastMessage = void 0;
+  this.messageFnWatcher = noop;
+  var expressionFnListener = function(newValue, oldValue) { return self.expressionFnListener(newValue, oldValue); };
+  this.expressionFnWatcher = scope['$watch'](msgSelector.expressionFn, expressionFnListener, objectEquality);
+}
+
+MessageSelectorWatchers.prototype.expressionFnListener = function expressionFnListener(newValue, oldValue) {
+  var self = this;
+  this.messageFnWatcher();
+  var messageFnListener = function(newMessage, oldMessage) { return self.messageFnListener(newMessage, oldMessage); };
+  var messageFn = this.msgSelector.getMessageFn(newValue);
+  this.messageFnWatcher = this.scope['$watch'](messageFn, messageFnListener, this.objectEquality);
+};
+
+MessageSelectorWatchers.prototype.messageFnListener = function messageFnListener(newMessage, oldMessage) {
+  if (isFunction(this.listener)) {
+    this.listener.call(null, newMessage, newMessage === oldMessage ? newMessage : this.lastMessage, this.scope);
+  }
+  this.lastMessage = newMessage;
+};
+
+MessageSelectorWatchers.prototype.cancelWatch = function cancelWatch() {
+  this.expressionFnWatcher();
+  this.messageFnWatcher();
+};
+
+/**
+ * @constructor
+ * @extends MessageSelectorBase
+ * @private
+ */
+function SelectMessage(expressionFn, choices) {
+  MessageSelectorBase.call(this, expressionFn, choices);
+}
+
+function SelectMessageProto() {}
+SelectMessageProto.prototype = MessageSelectorBase.prototype;
+
+SelectMessage.prototype = new SelectMessageProto();
+SelectMessage.prototype.categorizeValue = function categorizeSelectValue(value) {
+  return (this.choices[value] !== void 0) ? value : "other";
+};
+
+/**
+ * @constructor
+ * @extends MessageSelectorBase
+ * @private
+ */
+function PluralMessage(expressionFn, choices, offset, pluralCat) {
+  MessageSelectorBase.call(this, expressionFn, choices);
+  this.offset = offset;
+  this.pluralCat = pluralCat;
+}
+
+function PluralMessageProto() {}
+PluralMessageProto.prototype = MessageSelectorBase.prototype;
+
+PluralMessage.prototype = new PluralMessageProto();
+PluralMessage.prototype.categorizeValue = function categorizePluralValue(value) {
+  if (isNaN(value)) {
+    return "other";
+  } else if (this.choices[value] !== void 0) {
+    return value;
+  } else {
+    var category = this.pluralCat(value - this.offset);
+    return (this.choices[category] !== void 0) ? category : "other";
+  }
+};
+
+// NOTE: ADVANCED_OPTIMIZATIONS mode.
+//
+// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using
+// constructs incompatible with that mode.
+
+/* global $interpolateMinErr: false */
+/* global isFunction: false */
+/* global parseTextLiteral: false */
+
+/**
+ * @constructor
+ * @private
+ */
+function InterpolationParts(trustedContext, allOrNothing) {
+  this.trustedContext = trustedContext;
+  this.allOrNothing = allOrNothing;
+  this.textParts = [];
+  this.expressionFns = [];
+  this.expressionIndices = [];
+  this.partialText = '';
+  this.concatParts = null;
+}
+
+InterpolationParts.prototype.flushPartialText = function flushPartialText() {
+  if (this.partialText) {
+    if (this.concatParts == null) {
+      this.textParts.push(this.partialText);
+    } else {
+      this.textParts.push(this.concatParts.join(''));
+      this.concatParts = null;
+    }
+    this.partialText = '';
+  }
+};
+
+InterpolationParts.prototype.addText = function addText(text) {
+  if (text.length) {
+    if (!this.partialText) {
+      this.partialText = text;
+    } else if (this.concatParts) {
+      this.concatParts.push(text);
+    } else {
+      this.concatParts = [this.partialText, text];
+    }
+  }
+};
+
+InterpolationParts.prototype.addExpressionFn = function addExpressionFn(expressionFn) {
+  this.flushPartialText();
+  this.expressionIndices.push(this.textParts.length);
+  this.expressionFns.push(expressionFn);
+  this.textParts.push('');
+};
+
+InterpolationParts.prototype.getExpressionValues = function getExpressionValues(context) {
+  var expressionValues = new Array(this.expressionFns.length);
+  for (var i = 0; i < this.expressionFns.length; i++) {
+    expressionValues[i] = this.expressionFns[i](context);
+  }
+  return expressionValues;
+};
+
+InterpolationParts.prototype.getResult = function getResult(expressionValues) {
+  for (var i = 0; i < this.expressionIndices.length; i++) {
+    var expressionValue = expressionValues[i];
+    if (this.allOrNothing && expressionValue === void 0) return;
+    this.textParts[this.expressionIndices[i]] = expressionValue;
+  }
+  return this.textParts.join('');
+};
+
+
+InterpolationParts.prototype.toParsedFn = function toParsedFn(mustHaveExpression, originalText) {
+  var self = this;
+  this.flushPartialText();
+  if (mustHaveExpression && this.expressionFns.length === 0) {
+    return void 0;
+  }
+  if (this.textParts.length === 0) {
+    return parseTextLiteral('');
+  }
+  if (this.trustedContext && this.textParts.length > 1) {
+    $interpolateMinErr['throwNoconcat'](originalText);
+  }
+  if (this.expressionFns.length === 0) {
+    if (this.textParts.length != 1) { this.errorInParseLogic(); }
+    return parseTextLiteral(this.textParts[0]);
+  }
+  var parsedFn = function(context) {
+    return self.getResult(self.getExpressionValues(context));
+  };
+  parsedFn['$$watchDelegate'] = function $$watchDelegate(scope, listener, objectEquality) {
+    return self.watchDelegate(scope, listener, objectEquality);
+  };
+
+  parsedFn['exp'] = originalText; // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js
+  parsedFn['expressions'] = new Array(this.expressionFns.length); // Require this to call $compile.$$addBindingInfo() which allows Protractor to find elements by binding.
+  for (var i = 0; i < this.expressionFns.length; i++) {
+    parsedFn['expressions'][i] = this.expressionFns[i]['exp'];
+  }
+
+  return parsedFn;
+};
+
+InterpolationParts.prototype.watchDelegate = function watchDelegate(scope, listener, objectEquality) {
+  var watcher = new InterpolationPartsWatcher(this, scope, listener, objectEquality);
+  return function() { watcher.cancelWatch(); };
+};
+
+function InterpolationPartsWatcher(interpolationParts, scope, listener, objectEquality) {
+  this.interpolationParts = interpolationParts;
+  this.scope = scope;
+  this.previousResult = (void 0);
+  this.listener = listener;
+  var self = this;
+  this.expressionFnsWatcher = scope['$watchGroup'](interpolationParts.expressionFns, function(newExpressionValues, oldExpressionValues) {
+    self.watchListener(newExpressionValues, oldExpressionValues);
+  });
+}
+
+InterpolationPartsWatcher.prototype.watchListener = function watchListener(newExpressionValues, oldExpressionValues) {
+  var result = this.interpolationParts.getResult(newExpressionValues);
+  if (isFunction(this.listener)) {
+    this.listener.call(null, result, newExpressionValues === oldExpressionValues ? result : this.previousResult, this.scope);
+  }
+  this.previousResult = result;
+};
+
+InterpolationPartsWatcher.prototype.cancelWatch = function cancelWatch() {
+  this.expressionFnsWatcher();
+};
+
+// NOTE: ADVANCED_OPTIMIZATIONS mode.
+//
+// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using
+// constructs incompatible with that mode.
+
+/* global $interpolateMinErr: false */
+/* global indexToLineAndColumn: false */
+/* global InterpolationParts: false */
+/* global PluralMessage: false */
+/* global SelectMessage: false */
+/* global subtractOffset: false */
+
+// The params src and dst are exactly one of two types: NestedParserState or MessageFormatParser.
+// This function is fully optimized by V8. (inspect via IRHydra or --trace-deopt.)
+// The idea behind writing it this way is to avoid repeating oneself.  This is the ONE place where
+// the parser state that is saved/restored when parsing nested mustaches is specified.
+function copyNestedParserState(src, dst) {
+  dst.expressionFn = src.expressionFn;
+  dst.expressionMinusOffsetFn = src.expressionMinusOffsetFn;
+  dst.pluralOffset = src.pluralOffset;
+  dst.choices = src.choices;
+  dst.choiceKey = src.choiceKey;
+  dst.interpolationParts = src.interpolationParts;
+  dst.ruleChoiceKeyword = src.ruleChoiceKeyword;
+  dst.msgStartIndex = src.msgStartIndex;
+  dst.expressionStartIndex = src.expressionStartIndex;
+}
+
+function NestedParserState(parser) {
+  copyNestedParserState(parser, this);
+}
+
+/**
+ * @constructor
+ * @private
+ */
+function MessageFormatParser(text, startIndex, $parse, pluralCat, stringifier,
+                             mustHaveExpression, trustedContext, allOrNothing) {
+  this.text = text;
+  this.index = startIndex || 0;
+  this.$parse = $parse;
+  this.pluralCat = pluralCat;
+  this.stringifier = stringifier;
+  this.mustHaveExpression = !!mustHaveExpression;
+  this.trustedContext = trustedContext;
+  this.allOrNothing = !!allOrNothing;
+  this.expressionFn = null;
+  this.expressionMinusOffsetFn = null;
+  this.pluralOffset = null;
+  this.choices = null;
+  this.choiceKey = null;
+  this.interpolationParts = null;
+  this.msgStartIndex = null;
+  this.nestedStateStack = [];
+  this.parsedFn = null;
+  this.rule = null;
+  this.ruleStack = null;
+  this.ruleChoiceKeyword = null;
+  this.interpNestLevel = null;
+  this.expressionStartIndex = null;
+  this.stringStartIndex = null;
+  this.stringQuote = null;
+  this.stringInterestsRe = null;
+  this.angularOperatorStack = null;
+  this.textPart = null;
+}
+
+// preserve v8 optimization.
+var EMPTY_STATE = new NestedParserState(new MessageFormatParser(
+        /* text= */ '', /* startIndex= */ 0, /* $parse= */ null, /* pluralCat= */ null, /* stringifier= */ null,
+        /* mustHaveExpression= */ false, /* trustedContext= */ null, /* allOrNothing */ false));
+
+MessageFormatParser.prototype.pushState = function pushState() {
+  this.nestedStateStack.push(new NestedParserState(this));
+  copyNestedParserState(EMPTY_STATE, this);
+};
+
+MessageFormatParser.prototype.popState = function popState() {
+  if (this.nestedStateStack.length === 0) {
+    this.errorInParseLogic();
+  }
+  var previousState = this.nestedStateStack.pop();
+  copyNestedParserState(previousState, this);
+};
+
+// Oh my JavaScript!  Who knew you couldn't match a regex at a specific
+// location in a string but will always search forward?!
+// Apparently you'll be growing this ability via the sticky flag (y) in
+// ES6.  I'll just to work around you for now.
+MessageFormatParser.prototype.matchRe = function matchRe(re, search) {
+  re.lastIndex = this.index;
+  var match = re.exec(this.text);
+  if (match != null && (search === true || (match.index == this.index))) {
+    this.index = re.lastIndex;
+    return match;
+  }
+  return null;
+};
+
+MessageFormatParser.prototype.searchRe = function searchRe(re) {
+  return this.matchRe(re, true);
+};
+
+
+MessageFormatParser.prototype.consumeRe = function consumeRe(re) {
+  // Without the sticky flag, we can't use the .test() method to consume a
+  // match at the current index.  Instead, we'll use the slower .exec() method
+  // and verify match.index.
+  return !!this.matchRe(re);
+};
+
+// Run through our grammar avoiding deeply nested function call chains.
+MessageFormatParser.prototype.run = function run(initialRule) {
+  this.ruleStack = [initialRule];
+  do {
+    this.rule = this.ruleStack.pop();
+    while (this.rule) {
+      this.rule();
+    }
+    this.assertRuleOrNull(this.rule);
+  } while (this.ruleStack.length > 0);
+};
+
+MessageFormatParser.prototype.errorInParseLogic = function errorInParseLogic() {
+    throw $interpolateMinErr('logicbug',
+        'The messageformat parser has encountered an internal error.  Please file a github issue against the AngularJS project and provide this message text that triggers the bug.  Text: \u201c{0}\u201d',
+        this.text);
+};
+
+MessageFormatParser.prototype.assertRuleOrNull = function assertRuleOrNull(rule) {
+  if (rule === void 0) {
+    this.errorInParseLogic();
+  }
+};
+
+var NEXT_WORD_RE = /\s*(\w+)\s*/g;
+MessageFormatParser.prototype.errorExpecting = function errorExpecting() {
+  // What was wrong with the syntax? Unsupported type, missing comma, or something else?
+  var match = this.matchRe(NEXT_WORD_RE), position;
+  if (match == null) {
+    position = indexToLineAndColumn(this.text, this.index);
+    throw $interpolateMinErr('reqarg',
+        'Expected one of \u201cplural\u201d or \u201cselect\u201d at line {0}, column {1} of text \u201c{2}\u201d',
+        position.line, position.column, this.text);
+  }
+  var word = match[1];
+  if (word == "select" || word == "plural") {
+    position = indexToLineAndColumn(this.text, this.index);
+    throw $interpolateMinErr('reqcomma',
+        'Expected a comma after the keyword \u201c{0}\u201d at line {1}, column {2} of text \u201c{3}\u201d',
+        word, position.line, position.column, this.text);
+  } else {
+    position = indexToLineAndColumn(this.text, this.index);
+    throw $interpolateMinErr('unknarg',
+        'Unsupported keyword \u201c{0}\u201d at line {0}, column {1}. Only \u201cplural\u201d and \u201cselect\u201d are currently supported.  Text: \u201c{3}\u201d',
+        word, position.line, position.column, this.text);
+  }
+};
+
+var STRING_START_RE = /['"]/g;
+MessageFormatParser.prototype.ruleString = function ruleString() {
+  var match = this.matchRe(STRING_START_RE);
+  if (match == null) {
+    var position = indexToLineAndColumn(this.text, this.index);
+    throw $interpolateMinErr('wantstring',
+        'Expected the beginning of a string at line {0}, column {1} in text \u201c{2}\u201d',
+        position.line, position.column, this.text);
+  }
+  this.startStringAtMatch(match);
+};
+
+MessageFormatParser.prototype.startStringAtMatch = function startStringAtMatch(match) {
+  this.stringStartIndex = match.index;
+  this.stringQuote = match[0];
+  this.stringInterestsRe = this.stringQuote == "'" ? SQUOTED_STRING_INTEREST_RE : DQUOTED_STRING_INTEREST_RE;
+  this.rule = this.ruleInsideString;
+};
+
+var SQUOTED_STRING_INTEREST_RE = /\\(?:\\|'|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{2}|[0-7]{3}|\r\n|\n|[\s\S])|'/g;
+var DQUOTED_STRING_INTEREST_RE = /\\(?:\\|"|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{2}|[0-7]{3}|\r\n|\n|[\s\S])|"/g;
+MessageFormatParser.prototype.ruleInsideString = function ruleInsideString() {
+  var match = this.searchRe(this.stringInterestsRe);
+  if (match == null) {
+    var position = indexToLineAndColumn(this.text, this.stringStartIndex);
+    throw $interpolateMinErr('untermstr',
+        'The string beginning at line {0}, column {1} is unterminated in text \u201c{2}\u201d',
+        position.line, position.column, this.text);
+  }
+  var chars = match[0];
+  if (match == this.stringQuote) {
+    this.rule = null;
+  }
+};
+
+var PLURAL_OR_SELECT_ARG_TYPE_RE = /\s*(plural|select)\s*,\s*/g;
+MessageFormatParser.prototype.rulePluralOrSelect = function rulePluralOrSelect() {
+  var match = this.searchRe(PLURAL_OR_SELECT_ARG_TYPE_RE);
+  if (match == null) {
+    this.errorExpecting();
+  }
+  var argType = match[1];
+  switch (argType) {
+    case "plural": this.rule = this.rulePluralStyle; break;
+    case "select": this.rule = this.ruleSelectStyle; break;
+    default: this.errorInParseLogic();
+  }
+};
+
+MessageFormatParser.prototype.rulePluralStyle = function rulePluralStyle() {
+  this.choices = Object.create(null);
+  this.ruleChoiceKeyword = this.rulePluralValueOrKeyword;
+  this.rule = this.rulePluralOffset;
+};
+
+MessageFormatParser.prototype.ruleSelectStyle = function ruleSelectStyle() {
+  this.choices = Object.create(null);
+  this.ruleChoiceKeyword = this.ruleSelectKeyword;
+  this.rule = this.ruleSelectKeyword;
+};
+
+var NUMBER_RE = /[0]|(?:[1-9][0-9]*)/g;
+var PLURAL_OFFSET_RE = new RegExp("\\s*offset\\s*:\\s*(" + NUMBER_RE.source + ")", "g");
+
+MessageFormatParser.prototype.rulePluralOffset = function rulePluralOffset() {
+  var match = this.matchRe(PLURAL_OFFSET_RE);
+  this.pluralOffset = (match == null) ? 0 : parseInt(match[1], 10);
+  this.expressionMinusOffsetFn = subtractOffset(this.expressionFn, this.pluralOffset);
+  this.rule = this.rulePluralValueOrKeyword;
+};
+
+MessageFormatParser.prototype.assertChoiceKeyIsNew = function assertChoiceKeyIsNew(choiceKey, index) {
+  if (this.choices[choiceKey] !== void 0) {
+    var position = indexToLineAndColumn(this.text, index);
+    throw $interpolateMinErr('dupvalue',
+        'The choice \u201c{0}\u201d is specified more than once. Duplicate key is at line {1}, column {2} in text \u201c{3}\u201d',
+        choiceKey, position.line, position.column, this.text);
+  }
+};
+
+var SELECT_KEYWORD = /\s*(\w+)/g;
+MessageFormatParser.prototype.ruleSelectKeyword = function ruleSelectKeyword() {
+  var match = this.matchRe(SELECT_KEYWORD);
+  if (match == null) {
+    this.parsedFn = new SelectMessage(this.expressionFn, this.choices).parsedFn;
+    this.rule = null;
+    return;
+  }
+  this.choiceKey = match[1];
+  this.assertChoiceKeyIsNew(this.choiceKey, match.index);
+  this.rule = this.ruleMessageText;
+};
+
+var EXPLICIT_VALUE_OR_KEYWORD_RE = new RegExp("\\s*(?:(?:=(" + NUMBER_RE.source + "))|(\\w+))", "g");
+MessageFormatParser.prototype.rulePluralValueOrKeyword = function rulePluralValueOrKeyword() {
+  var match = this.matchRe(EXPLICIT_VALUE_OR_KEYWORD_RE);
+  if (match == null) {
+    this.parsedFn = new PluralMessage(this.expressionFn, this.choices, this.pluralOffset, this.pluralCat).parsedFn;
+    this.rule = null;
+    return;
+  }
+  if (match[1] != null) {
+    this.choiceKey = parseInt(match[1], 10);
+  } else {
+    this.choiceKey = match[2];
+  }
+  this.assertChoiceKeyIsNew(this.choiceKey, match.index);
+  this.rule = this.ruleMessageText;
+};
+
+var BRACE_OPEN_RE = /\s*{/g;
+var BRACE_CLOSE_RE = /}/g;
+MessageFormatParser.prototype.ruleMessageText = function ruleMessageText() {
+  if (!this.consumeRe(BRACE_OPEN_RE)) {
+    var position = indexToLineAndColumn(this.text, this.index);
+    throw $interpolateMinErr('reqopenbrace',
+        'The plural choice \u201c{0}\u201d must be followed by a message in braces at line {1}, column {2} in text \u201c{3}\u201d',
+        this.choiceKey, position.line, position.column, this.text);
+  }
+  this.msgStartIndex = this.index;
+  this.interpolationParts = new InterpolationParts(this.trustedContext, this.allOrNothing);
+  this.rule = this.ruleInInterpolationOrMessageText;
+};
+
+// Note: Since "\" is used as an escape character, don't allow it to be part of the
+// startSymbol/endSymbol when I add the feature to allow them to be redefined.
+var INTERP_OR_END_MESSAGE_RE = /\\.|{{|}/g;
+var INTERP_OR_PLURALVALUE_OR_END_MESSAGE_RE = /\\.|{{|#|}/g;
+var ESCAPE_OR_MUSTACHE_BEGIN_RE = /\\.|{{/g;
+MessageFormatParser.prototype.advanceInInterpolationOrMessageText = function advanceInInterpolationOrMessageText() {
+  var currentIndex = this.index, match, re;
+  if (this.ruleChoiceKeyword == null) { // interpolation
+    match = this.searchRe(ESCAPE_OR_MUSTACHE_BEGIN_RE);
+    if (match == null) { // End of interpolation text.  Nothing more to process.
+      this.textPart = this.text.substring(currentIndex);
+      this.index = this.text.length;
+      return null;
+    }
+  } else {
+    match = this.searchRe(this.ruleChoiceKeyword == this.rulePluralValueOrKeyword ?
+                          INTERP_OR_PLURALVALUE_OR_END_MESSAGE_RE : INTERP_OR_END_MESSAGE_RE);
+    if (match == null) {
+      var position = indexToLineAndColumn(this.text, this.msgStartIndex);
+      throw $interpolateMinErr('reqendbrace',
+          'The plural/select choice \u201c{0}\u201d message starting at line {1}, column {2} does not have an ending closing brace. Text \u201c{3}\u201d',
+          this.choiceKey, position.line, position.column, this.text);
+    }
+  }
+  // match is non-null.
+  var token = match[0];
+  this.textPart = this.text.substring(currentIndex, match.index);
+  return token;
+};
+
+MessageFormatParser.prototype.ruleInInterpolationOrMessageText = function ruleInInterpolationOrMessageText() {
+  var currentIndex = this.index;
+  var token = this.advanceInInterpolationOrMessageText();
+  if (token == null) {
+    // End of interpolation text.  Nothing more to process.
+    this.index = this.text.length;
+    this.interpolationParts.addText(this.text.substring(currentIndex));
+    this.rule = null;
+    return;
+  }
+  if (token[0] == "\\") {
+    // unescape next character and continue
+    this.interpolationParts.addText(this.textPart + token[1]);
+    return;
+  }
+  this.interpolationParts.addText(this.textPart);
+  if (token == "{{") {
+    this.pushState();
+    this.ruleStack.push(this.ruleEndMustacheInInterpolationOrMessage);
+    this.rule = this.ruleEnteredMustache;
+  } else if (token == "}") {
+    this.choices[this.choiceKey] = this.interpolationParts.toParsedFn(/*mustHaveExpression=*/false, this.text);
+    this.rule = this.ruleChoiceKeyword;
+  } else if (token == "#") {
+    this.interpolationParts.addExpressionFn(this.expressionMinusOffsetFn);
+  } else {
+    this.errorInParseLogic();
+  }
+};
+
+MessageFormatParser.prototype.ruleInterpolate = function ruleInterpolate() {
+  this.interpolationParts = new InterpolationParts(this.trustedContext, this.allOrNothing);
+  this.rule = this.ruleInInterpolation;
+};
+
+MessageFormatParser.prototype.ruleInInterpolation = function ruleInInterpolation() {
+  var currentIndex = this.index;
+  var match = this.searchRe(ESCAPE_OR_MUSTACHE_BEGIN_RE);
+  if (match == null) {
+    // End of interpolation text.  Nothing more to process.
+    this.index = this.text.length;
+    this.interpolationParts.addText(this.text.substring(currentIndex));
+    this.parsedFn = this.interpolationParts.toParsedFn(this.mustHaveExpression, this.text);
+    this.rule = null;
+    return;
+  }
+  var token = match[0];
+  if (token[0] == "\\") {
+    // unescape next character and continue
+    this.interpolationParts.addText(this.text.substring(currentIndex, match.index) + token[1]);
+    return;
+  }
+  this.interpolationParts.addText(this.text.substring(currentIndex, match.index));
+  this.pushState();
+  this.ruleStack.push(this.ruleInterpolationEndMustache);
+  this.rule = this.ruleEnteredMustache;
+};
+
+MessageFormatParser.prototype.ruleInterpolationEndMustache = function ruleInterpolationEndMustache() {
+  var expressionFn = this.parsedFn;
+  this.popState();
+  this.interpolationParts.addExpressionFn(expressionFn);
+  this.rule = this.ruleInInterpolation;
+};
+
+MessageFormatParser.prototype.ruleEnteredMustache = function ruleEnteredMustache() {
+  this.parsedFn = null;
+  this.ruleStack.push(this.ruleEndMustache);
+  this.rule = this.ruleAngularExpression;
+};
+
+MessageFormatParser.prototype.ruleEndMustacheInInterpolationOrMessage = function ruleEndMustacheInInterpolationOrMessage() {
+  var expressionFn = this.parsedFn;
+  this.popState();
+  this.interpolationParts.addExpressionFn(expressionFn);
+  this.rule = this.ruleInInterpolationOrMessageText;
+};
+
+
+
+var INTERP_END_RE = /\s*}}/g;
+MessageFormatParser.prototype.ruleEndMustache = function ruleEndMustache() {
+  var match = this.matchRe(INTERP_END_RE);
+  if (match == null) {
+    var position = indexToLineAndColumn(this.text, this.index);
+    throw $interpolateMinErr('reqendinterp',
+        'Expecting end of interpolation symbol, \u201c{0}\u201d, at line {1}, column {2} in text \u201c{3}\u201d',
+        '}}', position.line, position.column, this.text);
+  }
+  if (this.parsedFn == null) {
+    // If we parsed a MessageFormat extension, (e.g. select/plural today, maybe more some other
+    // day), then the result *has* to be a string and those rules would have already set
+    // this.parsedFn.  If there was no MessageFormat extension, then there is no requirement to
+    // stringify the result and parsedFn isn't set.  We set it here.  While we could have set it
+    // unconditionally when exiting the Angular expression, I intend for us to not just replace
+    // $interpolate, but also to replace $parse in a future version (so ng-bind can work), and in
+    // such a case we do not want to unnecessarily stringify something if it's not going to be used
+    // in a string context.
+    this.parsedFn = this.$parse(this.expressionFn, this.stringifier);
+    this.parsedFn['exp'] = this.expressionFn['exp']; // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js
+    this.parsedFn['expressions'] = this.expressionFn['expressions']; // Require this to call $compile.$$addBindingInfo() which allows Protractor to find elements by binding.
+  }
+  this.rule = null;
+};
+
+MessageFormatParser.prototype.ruleAngularExpression = function ruleAngularExpression() {
+  this.angularOperatorStack = [];
+  this.expressionStartIndex = this.index;
+  this.rule = this.ruleInAngularExpression;
+};
+
+function getEndOperator(opBegin) {
+  switch (opBegin) {
+    case "{": return "}";
+    case "[": return "]";
+    case "(": return ")";
+    default: return null;
+  }
+}
+
+function getBeginOperator(opEnd) {
+  switch (opEnd) {
+    case "}": return "{";
+    case "]": return "[";
+    case ")": return "(";
+    default: return null;
+  }
+}
+
+// TODO(chirayu): The interpolation endSymbol must also be accounted for. It
+// just so happens that "}" is an operator so it's in the list below.  But we
+// should support any other type of start/end interpolation symbol.
+var INTERESTING_OPERATORS_RE = /[[\]{}()'",]/g;
+MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularExpression() {
+  var startIndex = this.index;
+  var match = this.searchRe(INTERESTING_OPERATORS_RE);
+  var position;
+  if (match == null) {
+    if (this.angularOperatorStack.length === 0) {
+      // This is the end of the Angular expression so this is actually a
+      // success.  Note that when inside an interpolation, this means we even
+      // consumed the closing interpolation symbols if they were curlies.  This
+      // is NOT an error at this point but will become an error further up the
+      // stack when the part that saw the opening curlies is unable to find the
+      // closing ones.
+      this.index = this.text.length;
+      this.expressionFn = this.$parse(this.text.substring(this.expressionStartIndex, this.index));
+      // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js
+      this.expressionFn['exp'] = this.text.substring(this.expressionStartIndex, this.index);
+      this.expressionFn['expressions'] = this.expressionFn['expressions'];
+      this.rule = null;
+      return;
+    }
+    var innermostOperator = this.angularOperatorStack[0];
+    throw $interpolateMinErr('badexpr',
+        'Unexpected end of Angular expression.  Expecting operator \u201c{0}\u201d at the end of the text \u201c{1}\u201d',
+        this.getEndOperator(innermostOperator), this.text);
+  }
+  var operator = match[0];
+  if (operator == "'" || operator == '"') {
+    this.ruleStack.push(this.ruleInAngularExpression);
+    this.startStringAtMatch(match);
+    return;
+  }
+  if (operator == ",") {
+    if (this.trustedContext) {
+      position = indexToLineAndColumn(this.text, this.index);
+      throw $interpolateMinErr('unsafe',
+          'Use of select/plural MessageFormat syntax is currently disallowed in a secure context ({0}).  At line {1}, column {2} of text \u201c{3}\u201d',
+          this.trustedContext, position.line, position.column, this.text);
+    }
+    // only the top level comma has relevance.
+    if (this.angularOperatorStack.length === 0) {
+      // todo: does this need to be trimmed?
+      this.expressionFn = this.$parse(this.text.substring(this.expressionStartIndex, match.index));
+      // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js
+      this.expressionFn['exp'] = this.text.substring(this.expressionStartIndex, match.index);
+      this.expressionFn['expressions'] = this.expressionFn['expressions'];
+      this.rule = null;
+      this.rule = this.rulePluralOrSelect;
+    }
+    return;
+  }
+  if (getEndOperator(operator) != null) {
+    this.angularOperatorStack.unshift(operator);
+    return;
+  }
+  var beginOperator = getBeginOperator(operator);
+  if (beginOperator == null) {
+    this.errorInParseLogic();
+  }
+  if (this.angularOperatorStack.length > 0) {
+    if (beginOperator == this.angularOperatorStack[0]) {
+      this.angularOperatorStack.shift();
+      return;
+    }
+    position = indexToLineAndColumn(this.text, this.index);
+    throw $interpolateMinErr('badexpr',
+        'Unexpected operator \u201c{0}\u201d at line {1}, column {2} in text. Was expecting \u201c{3}\u201d. Text: \u201c{4}\u201d',
+        operator, position.line, position.column, getEndOperator(this.angularOperatorStack[0]), this.text);
+  }
+  // We are trying to pop off the operator stack but there really isn't anything to pop off.
+  this.index = match.index;
+  this.expressionFn = this.$parse(this.text.substring(this.expressionStartIndex, this.index));
+  // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js
+  this.expressionFn['exp'] = this.text.substring(this.expressionStartIndex, this.index);
+  this.expressionFn['expressions'] = this.expressionFn['expressions'];
+  this.rule = null;
+};
+
+// NOTE: ADVANCED_OPTIMIZATIONS mode.
+//
+// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using
+// constructs incompatible with that mode.
+
+/* global $interpolateMinErr: false */
+/* global MessageFormatParser: false */
+/* global stringify: false */
+
+/**
+ * @ngdoc service
+ * @name $$messageFormat
+ *
+ * @description
+ * Angular internal service to recognize MessageFormat extensions in interpolation expressions.
+ * For more information, see:
+ * https://docs.google.com/a/google.com/document/d/1pbtW2yvtmFBikfRrJd8VAsabiFkKezmYZ_PbgdjQOVU/edit
+ *
+ * ## Example
+ *
+ * <example name="ngMessageFormat-example" module="msgFmtExample" deps="angular-message-format.min.js">
+ * <file name="index.html">
+ *   <div ng-controller="AppController">
+ *     <button ng-click="decreaseRecipients()" id="decreaseRecipients">decreaseRecipients</button><br>
+ *     <span>{{recipients.length, plural, offset:1
+ *             =0    {{{sender.name}} gave no gifts (\#=#)}
+ *             =1    {{{sender.name}} gave one gift to {{recipients[0].name}} (\#=#)}
+ *             one   {{{sender.name}} gave {{recipients[0].name}} and one other person a gift (\#=#)}
+ *             other {{{sender.name}} gave {{recipients[0].name}} and # other people a gift (\#=#)}
+ *           }}</span>
+ *   </div>
+ * </file>
+ *
+ * <file name="script.js">
+ *   function Person(name, gender) {
+ *     this.name = name;
+ *     this.gender = gender;
+ *   }
+ *
+ *   var alice   = new Person("Alice", "female"),
+ *       bob     = new Person("Bob", "male"),
+ *       charlie = new Person("Charlie", "male"),
+ *       harry   = new Person("Harry Potter", "male");
+ *
+ *   angular.module('msgFmtExample', ['ngMessageFormat'])
+ *     .controller('AppController', ['$scope', function($scope) {
+ *         $scope.recipients = [alice, bob, charlie];
+ *         $scope.sender = harry;
+ *         $scope.decreaseRecipients = function() {
+ *           --$scope.recipients.length;
+ *         };
+ *       }]);
+ * </file>
+ *
+ * <file name="protractor.js" type="protractor">
+ *   describe('MessageFormat plural', function() {
+ *     it('should pluralize initial values', function() {
+ *       var messageElem = element(by.binding('recipients.length')), decreaseRecipientsBtn = element(by.id('decreaseRecipients'));
+ *       expect(messageElem.getText()).toEqual('Harry Potter gave Alice and 2 other people a gift (#=2)');
+ *       decreaseRecipientsBtn.click();
+ *       expect(messageElem.getText()).toEqual('Harry Potter gave Alice and one other person a gift (#=1)');
+ *       decreaseRecipientsBtn.click();
+ *       expect(messageElem.getText()).toEqual('Harry Potter gave one gift to Alice (#=0)');
+ *       decreaseRecipientsBtn.click();
+ *       expect(messageElem.getText()).toEqual('Harry Potter gave no gifts (#=-1)');
+ *     });
+ *   });
+ * </file>
+ * </example>
+ */
+var $$MessageFormatFactory = ['$parse', '$locale', '$sce', '$exceptionHandler', function $$messageFormat(
+                   $parse,   $locale,   $sce,   $exceptionHandler) {
+
+  function getStringifier(trustedContext, allOrNothing, text) {
+    return function stringifier(value) {
+      try {
+        value = trustedContext ? $sce['getTrusted'](trustedContext, value) : $sce['valueOf'](value);
+        return allOrNothing && (value === void 0) ? value : stringify(value);
+      } catch (err) {
+        $exceptionHandler($interpolateMinErr['interr'](text, err));
+      }
+    };
+  }
+
+  function interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
+    var stringifier = getStringifier(trustedContext, allOrNothing, text);
+    var parser = new MessageFormatParser(text, 0, $parse, $locale['pluralCat'], stringifier,
+                                         mustHaveExpression, trustedContext, allOrNothing);
+    parser.run(parser.ruleInterpolate);
+    return parser.parsedFn;
+  }
+
+  return {
+    'interpolate': interpolate
+  };
+}];
+
+var $$interpolateDecorator = ['$$messageFormat', '$delegate', function $$interpolateDecorator($$messageFormat, $interpolate) {
+  if ($interpolate['startSymbol']() != "{{" || $interpolate['endSymbol']() != "}}") {
+    throw $interpolateMinErr('nochgmustache', 'angular-message-format.js currently does not allow you to use custom start and end symbols for interpolation.');
+  }
+  var interpolate = $$messageFormat['interpolate'];
+  interpolate['startSymbol'] = $interpolate['startSymbol'];
+  interpolate['endSymbol'] = $interpolate['endSymbol'];
+  return interpolate;
+}];
+
+
+/**
+ * @ngdoc module
+ * @name ngMessageFormat
+ * @packageName angular-message-format
+ * @description
+ */
+var module = window['angular']['module']('ngMessageFormat', ['ng']);
+module['factory']('$$messageFormat', $$MessageFormatFactory);
+module['config'](['$provide', function($provide) {
+  $provide['decorator']('$interpolate', $$interpolateDecorator);
+}]);
+
+
+})(window, window.angular);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js
new file mode 100644
index 0000000..f85a587
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js
@@ -0,0 +1,26 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(h){'use strict';function C(a){if(null==a)return"";switch(typeof a){case "string":return a;case "number":return""+a;default:return D(a)}}function f(a,b){for(var d=a.split(/\n/g),k=0;k<d.length;k++){var c=d[k];if(b>=c.length)b-=c.length;else return{h:k+1,f:b+1}}}function t(a){function b(){return a}var d=u[a];if(null!=d)return d;b.$$watchDelegate=function(b,d,c){var e=b.$watch(v,function(){m(d)&&d.call(null,a,a,b);e()},c);return e};u[a]=b;b.exp=a;b.expressions=[];return b}function F(a,b){function d(a){return void 0==
+a?a:a-b}function c(b){return d(a(b))}if(0===b)return a;var e;c.$$watchDelegate=function(b,c,k){return e=b.$watch(a,function(a,k){m(c)&&c.call(null,d(a),d(k),b)},k)};return c}function l(a,b){var d=this;this.b=a;this.e=b;if(void 0===b.other)throw e("reqother");this.d=function(a){return d.D(a)};this.d.$$watchDelegate=function(a,b,c){return d.P(a,b,c)};this.d.exp=a.exp;this.d.expressions=a.expressions}function n(a,b,d,c){var e=this;this.scope=b;this.oa=a;this.v=d;this.qa=c;this.U=void 0;this.K=v;this.ka=
+b.$watch(a.b,function(a){return e.ja(a)},c)}function p(a,b){l.call(this,a,b)}function w(){}function q(a,b,d,c){l.call(this,a,b);this.offset=d;this.M=c}function x(){}function g(a,b){this.u=a;this.B=b;this.i=[];this.g=[];this.J=[];this.s="";this.q=null}function r(a,b,d){this.c=a;this.scope=b;this.W=void 0;this.v=d;var c=this;this.la=b.$watchGroup(a.g,function(a,b){c.Ea(a,b)})}function s(a,b){b.b=a.b;b.C=a.C;b.w=a.w;b.e=a.e;b.k=a.k;b.c=a.c;b.n=a.n;b.F=a.F;b.l=a.l}function y(a){s(a,this)}function c(a,
+b,d,c,e,E,f,g){this.text=a;this.index=b||0;this.A=d;this.M=c;this.Da=e;this.pa=!!E;this.u=f;this.B=!!g;this.F=this.c=this.k=this.e=this.w=this.C=this.b=null;this.L=[];this.G=this.j=this.ca=this.O=this.da=this.l=this.n=this.o=this.a=this.d=null}function z(a){switch(a){case "{":return"}";case "[":return"]";case "(":return")";default:return null}}function G(a){switch(a){case "}":return"{";case "]":return"[";case ")":return"(";default:return null}}var e=h.angular.$interpolateMinErr,v=h.angular.noop,m=
+h.angular.isFunction,D=h.angular.toJson,u=Object.create(null);l.prototype.T=function(a){return this.e[this.R(a)]};l.prototype.D=function(a){return this.T(this.b(a))(a)};l.prototype.P=function(a,b,d){var c=new n(this,a,b,d);return function(){c.I()}};n.prototype.ja=function(a){var b=this;this.K();a=this.oa.T(a);this.K=this.scope.$watch(a,function(a,c){return b.na(a,c)},this.qa)};n.prototype.na=function(a,b){m(this.v)&&this.v.call(null,a,a===b?a:this.U,this.scope);this.U=a};n.prototype.I=function(){this.ka();
+this.K()};w.prototype=l.prototype;p.prototype=new w;p.prototype.R=function(a){return void 0!==this.e[a]?a:"other"};x.prototype=l.prototype;q.prototype=new x;q.prototype.R=function(a){if(isNaN(a))return"other";if(void 0!==this.e[a])return a;a=this.M(a-this.offset);return void 0!==this.e[a]?a:"other"};g.prototype.S=function(){this.s&&(null==this.q?this.i.push(this.s):(this.i.push(this.q.join("")),this.q=null),this.s="")};g.prototype.p=function(a){a.length&&(this.s?this.q?this.q.push(a):this.q=[this.s,
+a]:this.s=a)};g.prototype.H=function(a){this.S();this.J.push(this.i.length);this.g.push(a);this.i.push("")};g.prototype.ma=function(a){for(var b=Array(this.g.length),d=0;d<this.g.length;d++)b[d]=this.g[d](a);return b};g.prototype.D=function(a){for(var b=0;b<this.J.length;b++){var d=a[b];if(this.B&&void 0===d)return;this.i[this.J[b]]=d}return this.i.join("")};g.prototype.ea=function(a,b){var d=this;this.S();if(!a||0!==this.g.length){if(0===this.i.length)return t("");this.u&&1<this.i.length&&e.throwNoconcat(b);
+if(0===this.g.length)return 1!=this.i.length&&this.r(),t(this.i[0]);var c=function(a){return d.D(d.ma(a))};c.$$watchDelegate=function(a,b,c){return d.P(a,b,c)};c.exp=b;c.expressions=Array(this.g.length);for(var f=0;f<this.g.length;f++)c.expressions[f]=this.g[f].exp;return c}};g.prototype.P=function(a,b){var c=new r(this,a,b);return function(){c.I()}};r.prototype.Ea=function(a,b){var c=this.c.D(a);m(this.v)&&this.v.call(null,c,a===b?c:this.W,this.scope);this.W=c};r.prototype.I=function(){this.la()};
+var H=new y(new c("",0,null,null,null,!1,null,!1));c.prototype.pushState=function(){this.L.push(new y(this));s(H,this)};c.prototype.V=function(){0===this.L.length&&this.r();var a=this.L.pop();s(a,this)};c.prototype.m=function(a,b){a.lastIndex=this.index;var c=a.exec(this.text);return null==c||!0!==b&&c.index!=this.index?null:(this.index=a.lastIndex,c)};c.prototype.t=function(a){return this.m(a,!0)};c.prototype.ha=function(a){return!!this.m(a)};c.prototype.Ba=function(a){this.o=[a];do{for(this.a=this.o.pop();this.a;)this.a();
+this.ga(this.a)}while(0<this.o.length)};c.prototype.r=function(){throw e("logicbug",this.text);};c.prototype.ga=function(a){void 0===a&&this.r()};var I=/\s*(\w+)\s*/g;c.prototype.ia=function(){var a=this.m(I);if(null==a)throw a=f(this.text,this.index),e("reqarg",a.h,a.f,this.text);var b=a[1];if("select"==b||"plural"==b)throw a=f(this.text,this.index),e("reqcomma",b,a.h,a.f,this.text);a=f(this.text,this.index);throw e("unknarg",b,a.h,a.f,this.text);};c.prototype.Ca=function(a){this.da=a.index;this.O=
+a[0];this.ca="'"==this.O?J:K;this.a=this.ua};var J=/\\(?:\\|'|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{2}|[0-7]{3}|\r\n|\n|[\s\S])|'/g,K=/\\(?:\\|"|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{2}|[0-7]{3}|\r\n|\n|[\s\S])|"/g;c.prototype.ua=function(){var a=this.t(this.ca);if(null==a)throw a=f(this.text,this.da),e("untermstr",a.h,a.f,this.text);a==this.O&&(this.a=null)};var L=/\s*(plural|select)\s*,\s*/g;c.prototype.ya=function(){var a=this.t(L);null==a&&this.ia();switch(a[1]){case "plural":this.a=this.za;break;case "select":this.a=
+this.Aa;break;default:this.r()}};c.prototype.za=function(){this.e=Object.create(null);this.n=this.N;this.a=this.xa};c.prototype.Aa=function(){this.e=Object.create(null);this.a=this.n=this.ba};var A=/[0]|(?:[1-9][0-9]*)/g,M=new RegExp("\\s*offset\\s*:\\s*("+A.source+")","g");c.prototype.xa=function(){var a=this.m(M);this.w=null==a?0:parseInt(a[1],10);this.C=F(this.b,this.w);this.a=this.N};c.prototype.Q=function(a,b){if(void 0!==this.e[a]){var c=f(this.text,b);throw e("dupvalue",a,c.h,c.f,this.text);
+}};var N=/\s*(\w+)/g;c.prototype.ba=function(){var a=this.m(N);null==a?(this.d=(new p(this.b,this.e)).d,this.a=null):(this.k=a[1],this.Q(this.k,a.index),this.a=this.aa)};var O=new RegExp("\\s*(?:(?:=("+A.source+"))|(\\w+))","g");c.prototype.N=function(){var a=this.m(O);null==a?(this.d=(new q(this.b,this.e,this.w,this.M)).d,this.a=null):(this.k=null!=a[1]?parseInt(a[1],10):a[2],this.Q(this.k,a.index),this.a=this.aa)};var P=/\s*{/g;c.prototype.aa=function(){if(!this.ha(P)){var a=f(this.text,this.index);
+throw e("reqopenbrace",this.k,a.h,a.f,this.text);}this.F=this.index;this.c=new g(this.u,this.B);this.a=this.$};var Q=/\\.|{{|}/g,R=/\\.|{{|#|}/g,B=/\\.|{{/g;c.prototype.fa=function(){var a=this.index,b;if(null==this.n){if(b=this.t(B),null==b)return this.G=this.text.substring(a),this.index=this.text.length,null}else if(b=this.t(this.n==this.N?R:Q),null==b)throw a=f(this.text,this.F),e("reqendbrace",this.k,a.h,a.f,this.text);var c=b[0];this.G=this.text.substring(a,b.index);return c};c.prototype.$=function(){var a=
+this.index,b=this.fa();null==b?(this.index=this.text.length,this.c.p(this.text.substring(a)),this.a=null):"\\"==b[0]?this.c.p(this.G+b[1]):(this.c.p(this.G),"{{"==b?(this.pushState(),this.o.push(this.ta),this.a=this.X):"}"==b?(this.e[this.k]=this.c.ea(!1,this.text),this.a=this.n):"#"==b?this.c.H(this.C):this.r())};c.prototype.va=function(){this.c=new g(this.u,this.B);this.a=this.Z};c.prototype.Z=function(){var a=this.index,b=this.t(B);if(null==b)this.index=this.text.length,this.c.p(this.text.substring(a)),
+this.d=this.c.ea(this.pa,this.text),this.a=null;else{var c=b[0];"\\"==c[0]?this.c.p(this.text.substring(a,b.index)+c[1]):(this.c.p(this.text.substring(a,b.index)),this.pushState(),this.o.push(this.wa),this.a=this.X)}};c.prototype.wa=function(){var a=this.d;this.V();this.c.H(a);this.a=this.Z};c.prototype.X=function(){this.d=null;this.o.push(this.sa);this.a=this.ra};c.prototype.ta=function(){var a=this.d;this.V();this.c.H(a);this.a=this.$};var S=/\s*}}/g;c.prototype.sa=function(){if(null==this.m(S)){var a=
+f(this.text,this.index);throw e("reqendinterp","}}",a.h,a.f,this.text);}null==this.d&&(this.d=this.A(this.b,this.Da),this.d.exp=this.b.exp,this.d.expressions=this.b.expressions);this.a=null};c.prototype.ra=function(){this.j=[];this.l=this.index;this.a=this.Y};var T=/[[\]{}()'",]/g;c.prototype.Y=function(){var a=this.t(T);if(null==a){if(0===this.j.length){this.index=this.text.length;this.b=this.A(this.text.substring(this.l,this.index));this.b.exp=this.text.substring(this.l,this.index);this.b.expressions=
+this.b.expressions;this.a=null;return}throw e("badexpr",this.Ga(this.j[0]),this.text);}var b=a[0];if("'"==b||'"'==b)this.o.push(this.Y),this.Ca(a);else if(","==b){if(this.u)throw a=f(this.text,this.index),e("unsafe",this.u,a.h,a.f,this.text);0===this.j.length&&(this.b=this.A(this.text.substring(this.l,a.index)),this.b.exp=this.text.substring(this.l,a.index),this.b.expressions=this.b.expressions,this.a=null,this.a=this.ya)}else if(null!=z(b))this.j.unshift(b);else{var c=G(b);null==c&&this.r();if(0<
+this.j.length){if(c==this.j[0]){this.j.shift();return}a=f(this.text,this.index);throw e("badexpr",b,a.h,a.f,z(this.j[0]),this.text);}this.index=a.index;this.b=this.A(this.text.substring(this.l,this.index));this.b.exp=this.text.substring(this.l,this.index);this.b.expressions=this.b.expressions;this.a=null}};var U=["$$messageFormat","$delegate",function(a,b){if("{{"!=b.startSymbol()||"}}"!=b.endSymbol())throw e("nochgmustache");var c=a.interpolate;c.startSymbol=b.startSymbol;c.endSymbol=b.endSymbol;
+return c}];h=h.angular.module("ngMessageFormat",["ng"]);h.factory("$$messageFormat",["$parse","$locale","$sce","$exceptionHandler",function(a,b,d,f){function g(a,b,c){return function(g){try{return g=a?d.getTrusted(a,g):d.valueOf(g),b&&void 0===g?g:C(g)}catch(h){f(e.interr(c,h))}}}return{interpolate:function(d,e,f,h){d=new c(d,0,a,b.pluralCat,g(f,h,d),e,f,h);d.Ba(d.va);return d.d}}}]);h.config(["$provide",function(a){a.decorator("$interpolate",U)}])})(window,window.Fa);
+//# sourceMappingURL=angular-message-format.min.js.map

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js.map
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js.map b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js.map
new file mode 100644
index 0000000..a6da634
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-message-format.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-message-format.min.js",
+"lineCount":25,
+"mappings":"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",
+"sources":["angular-message-format.js"],
+"names":["window","stringify","value","toJson","indexToLineAndColumn","text","index","lines","split","i","length","line","column","parseTextLiteral","parsedFn","cachedFn","PARSE_CACHE_FOR_TEXT_LITERALS","scope","listener","objectEquality","unwatch","noop","textLiteralWatcher","isFunction","call","subtractOffset","expressionFn","offset","minusOffset","context","pluralExpressionWatchListener","newValue","oldValue","MessageSelectorBase","choices","self","$interpolateMinErr","this.parsedFn","getResult","watchDelegate","MessageSelectorWatchers","msgSelector","lastMessage","messageFnWatcher","expressionFnWatcher","expressionFnListener","SelectMessage","SelectMessageProto","PluralMessage","pluralCat","PluralMessageProto","InterpolationParts","trustedContext","allOrNothing","textParts","expressionFns","expressionIndices","partialText","concatParts","InterpolationPartsWatcher","interpolationParts","previousResult","expressionFnsWatcher","newExpressionValues","oldExpressionValues","watchListe
 ner","copyNestedParserState","src","dst","expressionMinusOffsetFn","pluralOffset","choiceKey","ruleChoiceKeyword","msgStartIndex","expressionStartIndex","NestedParserState","parser","MessageFormatParser","startIndex","$parse","stringifier","mustHaveExpression","nestedStateStack","textPart","angularOperatorStack","stringInterestsRe","stringQuote","stringStartIndex","ruleStack","rule","getEndOperator","opBegin","getBeginOperator","opEnd","Object","create","prototype","getMessageFn","MessageSelectorBase.prototype.getMessageFn","categorizeValue","MessageSelectorBase.prototype.getResult","MessageSelectorBase.prototype.watchDelegate","watchers","cancelWatch","MessageSelectorWatchers.prototype.expressionFnListener","messageFn","messageFnListener","newMessage","oldMessage","MessageSelectorWatchers.prototype.messageFnListener","MessageSelectorWatchers.prototype.cancelWatch","SelectMessage.prototype.categorizeValue","PluralMessage.prototype.categorizeValue","isNaN","category","flushPartialTex
 t","InterpolationParts.prototype.flushPartialText","push","join","addText","InterpolationParts.prototype.addText","addExpressionFn","InterpolationParts.prototype.addExpressionFn","getExpressionValues","InterpolationParts.prototype.getExpressionValues","expressionValues","Array","InterpolationParts.prototype.getResult","expressionValue","toParsedFn","InterpolationParts.prototype.toParsedFn","originalText","errorInParseLogic","InterpolationParts.prototype.watchDelegate","watcher","InterpolationPartsWatcher.prototype.watchListener","result","InterpolationPartsWatcher.prototype.cancelWatch","EMPTY_STATE","pushState","MessageFormatParser.prototype.pushState","popState","MessageFormatParser.prototype.popState","previousState","pop","matchRe","MessageFormatParser.prototype.matchRe","re","search","lastIndex","match","exec","searchRe","MessageFormatParser.prototype.searchRe","consumeRe","MessageFormatParser.prototype.consumeRe","run","MessageFormatParser.prototype.run","initialRule","assertR
 uleOrNull","MessageFormatParser.prototype.errorInParseLogic","MessageFormatParser.prototype.assertRuleOrNull","NEXT_WORD_RE","errorExpecting","MessageFormatParser.prototype.errorExpecting","position","word","startStringAtMatch","MessageFormatParser.prototype.startStringAtMatch","SQUOTED_STRING_INTEREST_RE","DQUOTED_STRING_INTEREST_RE","ruleInsideString","MessageFormatParser.prototype.ruleInsideString","PLURAL_OR_SELECT_ARG_TYPE_RE","rulePluralOrSelect","MessageFormatParser.prototype.rulePluralOrSelect","argType","rulePluralStyle","ruleSelectStyle","MessageFormatParser.prototype.rulePluralStyle","rulePluralValueOrKeyword","rulePluralOffset","MessageFormatParser.prototype.ruleSelectStyle","ruleSelectKeyword","NUMBER_RE","PLURAL_OFFSET_RE","RegExp","source","MessageFormatParser.prototype.rulePluralOffset","parseInt","assertChoiceKeyIsNew","MessageFormatParser.prototype.assertChoiceKeyIsNew","SELECT_KEYWORD","MessageFormatParser.prototype.ruleSelectKeyword","ruleMessageText","EXPLICIT_V
 ALUE_OR_KEYWORD_RE","MessageFormatParser.prototype.rulePluralValueOrKeyword","BRACE_OPEN_RE","MessageFormatParser.prototype.ruleMessageText","ruleInInterpolationOrMessageText","INTERP_OR_END_MESSAGE_RE","INTERP_OR_PLURALVALUE_OR_END_MESSAGE_RE","ESCAPE_OR_MUSTACHE_BEGIN_RE","advanceInInterpolationOrMessageText","MessageFormatParser.prototype.advanceInInterpolationOrMessageText","currentIndex","substring","token","MessageFormatParser.prototype.ruleInInterpolationOrMessageText","ruleEndMustacheInInterpolationOrMessage","ruleEnteredMustache","ruleInterpolate","MessageFormatParser.prototype.ruleInterpolate","ruleInInterpolation","MessageFormatParser.prototype.ruleInInterpolation","ruleInterpolationEndMustache","MessageFormatParser.prototype.ruleInterpolationEndMustache","MessageFormatParser.prototype.ruleEnteredMustache","ruleEndMustache","ruleAngularExpression","MessageFormatParser.prototype.ruleEndMustacheInInterpolationOrMessage","INTERP_END_RE","MessageFormatParser.prototype.ruleEnd
 Mustache","MessageFormatParser.prototype.ruleAngularExpression","ruleInAngularExpression","INTERESTING_OPERATORS_RE","MessageFormatParser.prototype.ruleInAngularExpression","innermostOperator","operator","unshift","beginOperator","shift","$$interpolateDecorator","$$messageFormat","$interpolate","interpolate","module","$$MessageFormatFactory","$locale","$sce","$exceptionHandler","getStringifier","err","$provide","angular"]
+}


[07/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-me.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-me.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-me.js
new file mode 100644
index 0000000..7a978c0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-me.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e \u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0435",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-cyrl-me",
+  "localeID": "sr_Cyrl_ME",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-rs.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-rs.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-rs.js
new file mode 100644
index 0000000..420af9b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-rs.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e \u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0435",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-cyrl-rs",
+  "localeID": "sr_Cyrl_RS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-xk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-xk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-xk.js
new file mode 100644
index 0000000..655c151
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-xk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e \u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0435",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-cyrl-xk",
+  "localeID": "sr_Cyrl_XK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl.js
new file mode 100644
index 0000000..910bccb
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e \u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0435",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-cyrl",
+  "localeID": "sr_Cyrl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-ba.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-ba.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-ba.js
new file mode 100644
index 0000000..0fa1414
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-ba.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "pre podne",
+      "po podne"
+    ],
+    "DAY": [
+      "nedelja",
+      "ponedeljak",
+      "utorak",
+      "sreda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Pre nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sre",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "avg",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH:mm:ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy. HH:mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-latn-ba",
+  "localeID": "sr_Latn_BA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-me.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-me.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-me.js
new file mode 100644
index 0000000..9a5748d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-me.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "pre podne",
+      "po podne"
+    ],
+    "DAY": [
+      "nedelja",
+      "ponedeljak",
+      "utorak",
+      "sreda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Pre nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sre",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "avg",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-latn-me",
+  "localeID": "sr_Latn_ME",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-rs.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-rs.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-rs.js
new file mode 100644
index 0000000..24b2a8d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-rs.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "pre podne",
+      "po podne"
+    ],
+    "DAY": [
+      "nedelja",
+      "ponedeljak",
+      "utorak",
+      "sreda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Pre nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sre",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "avg",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-latn-rs",
+  "localeID": "sr_Latn_RS",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-xk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-xk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-xk.js
new file mode 100644
index 0000000..0e14f7b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn-xk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "pre podne",
+      "po podne"
+    ],
+    "DAY": [
+      "nedelja",
+      "ponedeljak",
+      "utorak",
+      "sreda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Pre nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sre",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "avg",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-latn-xk",
+  "localeID": "sr_Latn_XK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn.js
new file mode 100644
index 0000000..97320ef
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "pre podne",
+      "po podne"
+    ],
+    "DAY": [
+      "nedelja",
+      "ponedeljak",
+      "utorak",
+      "sreda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Pre nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sre",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "avg",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "jun",
+      "jul",
+      "avgust",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-latn",
+  "localeID": "sr_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr.js
new file mode 100644
index 0000000..06d1ae5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e \u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0435",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH.mm.ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH.mm.ss",
+    "short": "d.M.yy. HH.mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr",
+  "localeID": "sr",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-sz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-sz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-sz.js
new file mode 100644
index 0000000..ae1fdd5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-sz.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lisontfo",
+      "uMsombuluko",
+      "Lesibili",
+      "Lesitsatfu",
+      "Lesine",
+      "Lesihlanu",
+      "uMgcibelo"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Bhimbidvwane",
+      "iNdlovana",
+      "iNdlovu-lenkhulu",
+      "Mabasa",
+      "iNkhwekhweti",
+      "iNhlaba",
+      "Kholwane",
+      "iNgci",
+      "iNyoni",
+      "iMphala",
+      "Lweti",
+      "iNgongoni"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mso",
+      "Bil",
+      "Tsa",
+      "Ne",
+      "Hla",
+      "Mgc"
+    ],
+    "SHORTMONTH": [
+      "Bhi",
+      "Van",
+      "Vol",
+      "Mab",
+      "Nkh",
+      "Nhl",
+      "Kho",
+      "Ngc",
+      "Nyo",
+      "Mph",
+      "Lwe",
+      "Ngo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SZL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ss-sz",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-za.js
new file mode 100644
index 0000000..afb5b99
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss-za.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lisontfo",
+      "uMsombuluko",
+      "Lesibili",
+      "Lesitsatfu",
+      "Lesine",
+      "Lesihlanu",
+      "uMgcibelo"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Bhimbidvwane",
+      "iNdlovana",
+      "iNdlovu-lenkhulu",
+      "Mabasa",
+      "iNkhwekhweti",
+      "iNhlaba",
+      "Kholwane",
+      "iNgci",
+      "iNyoni",
+      "iMphala",
+      "Lweti",
+      "iNgongoni"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mso",
+      "Bil",
+      "Tsa",
+      "Ne",
+      "Hla",
+      "Mgc"
+    ],
+    "SHORTMONTH": [
+      "Bhi",
+      "Van",
+      "Vol",
+      "Mab",
+      "Nkh",
+      "Nhl",
+      "Kho",
+      "Ngc",
+      "Nyo",
+      "Mph",
+      "Lwe",
+      "Ngo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ss-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss.js
new file mode 100644
index 0000000..3ff8846
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ss.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lisontfo",
+      "uMsombuluko",
+      "Lesibili",
+      "Lesitsatfu",
+      "Lesine",
+      "Lesihlanu",
+      "uMgcibelo"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Bhimbidvwane",
+      "iNdlovana",
+      "iNdlovu-lenkhulu",
+      "Mabasa",
+      "iNkhwekhweti",
+      "iNhlaba",
+      "Kholwane",
+      "iNgci",
+      "iNyoni",
+      "iMphala",
+      "Lweti",
+      "iNgongoni"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mso",
+      "Bil",
+      "Tsa",
+      "Ne",
+      "Hla",
+      "Mgc"
+    ],
+    "SHORTMONTH": [
+      "Bhi",
+      "Van",
+      "Vol",
+      "Mab",
+      "Nkh",
+      "Nhl",
+      "Kho",
+      "Ngc",
+      "Nyo",
+      "Mph",
+      "Lwe",
+      "Ngo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ss",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy-er.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy-er.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy-er.js
new file mode 100644
index 0000000..d4cb8e5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy-er.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "saaku",
+      "carra"
+    ],
+    "DAY": [
+      "Naba Sambat",
+      "Sani",
+      "Salus",
+      "Rabuq",
+      "Camus",
+      "Jumqata",
+      "Qunxa Sambat"
+    ],
+    "ERANAMES": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "ERAS": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Qunxa Garablu",
+      "Kudo",
+      "Ciggilta Kudo",
+      "Agda Baxis",
+      "Caxah Alsa",
+      "Qasa Dirri",
+      "Qado Dirri",
+      "Liiqen",
+      "Waysu",
+      "Diteli",
+      "Ximoli",
+      "Kaxxa Garablu"
+    ],
+    "SHORTDAY": [
+      "Nab",
+      "San",
+      "Sal",
+      "Rab",
+      "Cam",
+      "Jum",
+      "Qun"
+    ],
+    "SHORTMONTH": [
+      "Qun",
+      "Nah",
+      "Cig",
+      "Agd",
+      "Cax",
+      "Qas",
+      "Qad",
+      "Leq",
+      "Way",
+      "Dit",
+      "Xim",
+      "Kax"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ssy-er",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy.js
new file mode 100644
index 0000000..93c0eba
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ssy.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "saaku",
+      "carra"
+    ],
+    "DAY": [
+      "Naba Sambat",
+      "Sani",
+      "Salus",
+      "Rabuq",
+      "Camus",
+      "Jumqata",
+      "Qunxa Sambat"
+    ],
+    "ERANAMES": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "ERAS": [
+      "Yaasuusuk Duma",
+      "Yaasuusuk Wadir"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Qunxa Garablu",
+      "Kudo",
+      "Ciggilta Kudo",
+      "Agda Baxis",
+      "Caxah Alsa",
+      "Qasa Dirri",
+      "Qado Dirri",
+      "Liiqen",
+      "Waysu",
+      "Diteli",
+      "Ximoli",
+      "Kaxxa Garablu"
+    ],
+    "SHORTDAY": [
+      "Nab",
+      "San",
+      "Sal",
+      "Rab",
+      "Cam",
+      "Jum",
+      "Qun"
+    ],
+    "SHORTMONTH": [
+      "Qun",
+      "Nah",
+      "Cig",
+      "Agd",
+      "Cax",
+      "Qas",
+      "Qad",
+      "Leq",
+      "Way",
+      "Dit",
+      "Xim",
+      "Kax"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ssy",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-ls.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-ls.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-ls.js
new file mode 100644
index 0000000..c17e6a3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-ls.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sontaha",
+      "Mmantaha",
+      "Labobedi",
+      "Laboraru",
+      "Labone",
+      "Labohlane",
+      "Moqebelo"
+    ],
+    "MONTH": [
+      "Phesekgong",
+      "Hlakola",
+      "Hlakubele",
+      "Mmese",
+      "Motsheanong",
+      "Phupjane",
+      "Phupu",
+      "Phata",
+      "Leotshe",
+      "Mphalane",
+      "Pundungwane",
+      "Tshitwe"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mma",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Hla",
+      "Moq"
+    ],
+    "SHORTMONTH": [
+      "Phe",
+      "Kol",
+      "Ube",
+      "Mme",
+      "Mot",
+      "Jan",
+      "Upu",
+      "Pha",
+      "Leo",
+      "Mph",
+      "Pun",
+      "Tsh"
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "st-ls",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-za.js
new file mode 100644
index 0000000..ed1ac9c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st-za.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sontaha",
+      "Mmantaha",
+      "Labobedi",
+      "Laboraru",
+      "Labone",
+      "Labohlane",
+      "Moqebelo"
+    ],
+    "MONTH": [
+      "Phesekgong",
+      "Hlakola",
+      "Hlakubele",
+      "Mmese",
+      "Motsheanong",
+      "Phupjane",
+      "Phupu",
+      "Phata",
+      "Leotshe",
+      "Mphalane",
+      "Pundungwane",
+      "Tshitwe"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mma",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Hla",
+      "Moq"
+    ],
+    "SHORTMONTH": [
+      "Phe",
+      "Kol",
+      "Ube",
+      "Mme",
+      "Mot",
+      "Jan",
+      "Upu",
+      "Pha",
+      "Leo",
+      "Mph",
+      "Pun",
+      "Tsh"
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "st-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st.js
new file mode 100644
index 0000000..64d95b6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_st.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sontaha",
+      "Mmantaha",
+      "Labobedi",
+      "Laboraru",
+      "Labone",
+      "Labohlane",
+      "Moqebelo"
+    ],
+    "MONTH": [
+      "Phesekgong",
+      "Hlakola",
+      "Hlakubele",
+      "Mmese",
+      "Motsheanong",
+      "Phupjane",
+      "Phupu",
+      "Phata",
+      "Leotshe",
+      "Mphalane",
+      "Pundungwane",
+      "Tshitwe"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mma",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Hla",
+      "Moq"
+    ],
+    "SHORTMONTH": [
+      "Phe",
+      "Kol",
+      "Ube",
+      "Mme",
+      "Mot",
+      "Jan",
+      "Upu",
+      "Pha",
+      "Leo",
+      "Mph",
+      "Pun",
+      "Tsh"
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "st",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-ax.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-ax.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-ax.js
new file mode 100644
index 0000000..039f673
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-ax.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "fm",
+      "em"
+    ],
+    "DAY": [
+      "s\u00f6ndag",
+      "m\u00e5ndag",
+      "tisdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f6rdag"
+    ],
+    "ERANAMES": [
+      "f\u00f6re Kristus",
+      "efter Kristus"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "mars",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "augusti",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "s\u00f6n",
+      "m\u00e5n",
+      "tis",
+      "ons",
+      "tors",
+      "fre",
+      "l\u00f6r"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mars",
+      "apr.",
+      "maj",
+      "juni",
+      "juli",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mars",
+      "April",
+      "Maj",
+      "Juni",
+      "Juli",
+      "Augusti",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sv-ax",
+  "localeID": "sv_AX",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-fi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-fi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-fi.js
new file mode 100644
index 0000000..de2e20a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-fi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "fm",
+      "em"
+    ],
+    "DAY": [
+      "s\u00f6ndag",
+      "m\u00e5ndag",
+      "tisdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f6rdag"
+    ],
+    "ERANAMES": [
+      "f\u00f6re Kristus",
+      "efter Kristus"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "mars",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "augusti",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "s\u00f6n",
+      "m\u00e5n",
+      "tis",
+      "ons",
+      "tors",
+      "fre",
+      "l\u00f6r"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mars",
+      "apr.",
+      "maj",
+      "juni",
+      "juli",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mars",
+      "April",
+      "Maj",
+      "Juni",
+      "Juli",
+      "Augusti",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd-MM-y HH:mm",
+    "shortDate": "dd-MM-y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sv-fi",
+  "localeID": "sv_FI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-se.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-se.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-se.js
new file mode 100644
index 0000000..774beb1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv-se.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "fm",
+      "em"
+    ],
+    "DAY": [
+      "s\u00f6ndag",
+      "m\u00e5ndag",
+      "tisdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f6rdag"
+    ],
+    "ERANAMES": [
+      "f\u00f6re Kristus",
+      "efter Kristus"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "mars",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "augusti",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "s\u00f6n",
+      "m\u00e5n",
+      "tis",
+      "ons",
+      "tors",
+      "fre",
+      "l\u00f6r"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mars",
+      "apr.",
+      "maj",
+      "juni",
+      "juli",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mars",
+      "April",
+      "Maj",
+      "Juni",
+      "Juli",
+      "Augusti",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sv-se",
+  "localeID": "sv_SE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv.js
new file mode 100644
index 0000000..1dcdc27
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sv.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "fm",
+      "em"
+    ],
+    "DAY": [
+      "s\u00f6ndag",
+      "m\u00e5ndag",
+      "tisdag",
+      "onsdag",
+      "torsdag",
+      "fredag",
+      "l\u00f6rdag"
+    ],
+    "ERANAMES": [
+      "f\u00f6re Kristus",
+      "efter Kristus"
+    ],
+    "ERAS": [
+      "f.Kr.",
+      "e.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "mars",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "augusti",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "s\u00f6n",
+      "m\u00e5n",
+      "tis",
+      "ons",
+      "tors",
+      "fre",
+      "l\u00f6r"
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mars",
+      "apr.",
+      "maj",
+      "juni",
+      "juli",
+      "aug.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Mars",
+      "April",
+      "Maj",
+      "Juni",
+      "Juli",
+      "Augusti",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sv",
+  "localeID": "sv",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[43/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-mocks.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-mocks.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-mocks.js
new file mode 100644
index 0000000..34d3608
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-mocks.js
@@ -0,0 +1,2842 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+
+'use strict';
+
+/**
+ * @ngdoc object
+ * @name angular.mock
+ * @description
+ *
+ * Namespace from 'angular-mocks.js' which contains testing related code.
+ */
+angular.mock = {};
+
+/**
+ * ! This is a private undocumented service !
+ *
+ * @name $browser
+ *
+ * @description
+ * This service is a mock implementation of {@link ng.$browser}. It provides fake
+ * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,
+ * cookies, etc...
+ *
+ * The api of this service is the same as that of the real {@link ng.$browser $browser}, except
+ * that there are several helper methods available which can be used in tests.
+ */
+angular.mock.$BrowserProvider = function() {
+  this.$get = function() {
+    return new angular.mock.$Browser();
+  };
+};
+
+angular.mock.$Browser = function() {
+  var self = this;
+
+  this.isMock = true;
+  self.$$url = "http://server/";
+  self.$$lastUrl = self.$$url; // used by url polling fn
+  self.pollFns = [];
+
+  // TODO(vojta): remove this temporary api
+  self.$$completeOutstandingRequest = angular.noop;
+  self.$$incOutstandingRequestCount = angular.noop;
+
+
+  // register url polling fn
+
+  self.onUrlChange = function(listener) {
+    self.pollFns.push(
+      function() {
+        if (self.$$lastUrl !== self.$$url || self.$$state !== self.$$lastState) {
+          self.$$lastUrl = self.$$url;
+          self.$$lastState = self.$$state;
+          listener(self.$$url, self.$$state);
+        }
+      }
+    );
+
+    return listener;
+  };
+
+  self.$$applicationDestroyed = angular.noop;
+  self.$$checkUrlChange = angular.noop;
+
+  self.deferredFns = [];
+  self.deferredNextId = 0;
+
+  self.defer = function(fn, delay) {
+    delay = delay || 0;
+    self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId});
+    self.deferredFns.sort(function(a, b) { return a.time - b.time;});
+    return self.deferredNextId++;
+  };
+
+
+  /**
+   * @name $browser#defer.now
+   *
+   * @description
+   * Current milliseconds mock time.
+   */
+  self.defer.now = 0;
+
+
+  self.defer.cancel = function(deferId) {
+    var fnIndex;
+
+    angular.forEach(self.deferredFns, function(fn, index) {
+      if (fn.id === deferId) fnIndex = index;
+    });
+
+    if (angular.isDefined(fnIndex)) {
+      self.deferredFns.splice(fnIndex, 1);
+      return true;
+    }
+
+    return false;
+  };
+
+
+  /**
+   * @name $browser#defer.flush
+   *
+   * @description
+   * Flushes all pending requests and executes the defer callbacks.
+   *
+   * @param {number=} number of milliseconds to flush. See {@link #defer.now}
+   */
+  self.defer.flush = function(delay) {
+    if (angular.isDefined(delay)) {
+      self.defer.now += delay;
+    } else {
+      if (self.deferredFns.length) {
+        self.defer.now = self.deferredFns[self.deferredFns.length - 1].time;
+      } else {
+        throw new Error('No deferred tasks to be flushed');
+      }
+    }
+
+    while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {
+      self.deferredFns.shift().fn();
+    }
+  };
+
+  self.$$baseHref = '/';
+  self.baseHref = function() {
+    return this.$$baseHref;
+  };
+};
+angular.mock.$Browser.prototype = {
+
+/**
+  * @name $browser#poll
+  *
+  * @description
+  * run all fns in pollFns
+  */
+  poll: function poll() {
+    angular.forEach(this.pollFns, function(pollFn) {
+      pollFn();
+    });
+  },
+
+  url: function(url, replace, state) {
+    if (angular.isUndefined(state)) {
+      state = null;
+    }
+    if (url) {
+      this.$$url = url;
+      // Native pushState serializes & copies the object; simulate it.
+      this.$$state = angular.copy(state);
+      return this;
+    }
+
+    return this.$$url;
+  },
+
+  state: function() {
+    return this.$$state;
+  },
+
+  notifyWhenNoOutstandingRequests: function(fn) {
+    fn();
+  }
+};
+
+
+/**
+ * @ngdoc provider
+ * @name $exceptionHandlerProvider
+ *
+ * @description
+ * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors
+ * passed to the `$exceptionHandler`.
+ */
+
+/**
+ * @ngdoc service
+ * @name $exceptionHandler
+ *
+ * @description
+ * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed
+ * to it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration
+ * information.
+ *
+ *
+ * ```js
+ *   describe('$exceptionHandlerProvider', function() {
+ *
+ *     it('should capture log messages and exceptions', function() {
+ *
+ *       module(function($exceptionHandlerProvider) {
+ *         $exceptionHandlerProvider.mode('log');
+ *       });
+ *
+ *       inject(function($log, $exceptionHandler, $timeout) {
+ *         $timeout(function() { $log.log(1); });
+ *         $timeout(function() { $log.log(2); throw 'banana peel'; });
+ *         $timeout(function() { $log.log(3); });
+ *         expect($exceptionHandler.errors).toEqual([]);
+ *         expect($log.assertEmpty());
+ *         $timeout.flush();
+ *         expect($exceptionHandler.errors).toEqual(['banana peel']);
+ *         expect($log.log.logs).toEqual([[1], [2], [3]]);
+ *       });
+ *     });
+ *   });
+ * ```
+ */
+
+angular.mock.$ExceptionHandlerProvider = function() {
+  var handler;
+
+  /**
+   * @ngdoc method
+   * @name $exceptionHandlerProvider#mode
+   *
+   * @description
+   * Sets the logging mode.
+   *
+   * @param {string} mode Mode of operation, defaults to `rethrow`.
+   *
+   *   - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`
+   *            mode stores an array of errors in `$exceptionHandler.errors`, to allow later
+   *            assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
+   *            {@link ngMock.$log#reset reset()}
+   *   - `rethrow`: If any errors are passed to the handler in tests, it typically means that there
+   *                is a bug in the application or test, so this mock will make these tests fail.
+   *                For any implementations that expect exceptions to be thrown, the `rethrow` mode
+   *                will also maintain a log of thrown errors.
+   */
+  this.mode = function(mode) {
+
+    switch (mode) {
+      case 'log':
+      case 'rethrow':
+        var errors = [];
+        handler = function(e) {
+          if (arguments.length == 1) {
+            errors.push(e);
+          } else {
+            errors.push([].slice.call(arguments, 0));
+          }
+          if (mode === "rethrow") {
+            throw e;
+          }
+        };
+        handler.errors = errors;
+        break;
+      default:
+        throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!");
+    }
+  };
+
+  this.$get = function() {
+    return handler;
+  };
+
+  this.mode('rethrow');
+};
+
+
+/**
+ * @ngdoc service
+ * @name $log
+ *
+ * @description
+ * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays
+ * (one array per logging level). These arrays are exposed as `logs` property of each of the
+ * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`.
+ *
+ */
+angular.mock.$LogProvider = function() {
+  var debug = true;
+
+  function concat(array1, array2, index) {
+    return array1.concat(Array.prototype.slice.call(array2, index));
+  }
+
+  this.debugEnabled = function(flag) {
+    if (angular.isDefined(flag)) {
+      debug = flag;
+      return this;
+    } else {
+      return debug;
+    }
+  };
+
+  this.$get = function() {
+    var $log = {
+      log: function() { $log.log.logs.push(concat([], arguments, 0)); },
+      warn: function() { $log.warn.logs.push(concat([], arguments, 0)); },
+      info: function() { $log.info.logs.push(concat([], arguments, 0)); },
+      error: function() { $log.error.logs.push(concat([], arguments, 0)); },
+      debug: function() {
+        if (debug) {
+          $log.debug.logs.push(concat([], arguments, 0));
+        }
+      }
+    };
+
+    /**
+     * @ngdoc method
+     * @name $log#reset
+     *
+     * @description
+     * Reset all of the logging arrays to empty.
+     */
+    $log.reset = function() {
+      /**
+       * @ngdoc property
+       * @name $log#log.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#log `log()`}.
+       *
+       * @example
+       * ```js
+       * $log.log('Some Log');
+       * var first = $log.log.logs.unshift();
+       * ```
+       */
+      $log.log.logs = [];
+      /**
+       * @ngdoc property
+       * @name $log#info.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#info `info()`}.
+       *
+       * @example
+       * ```js
+       * $log.info('Some Info');
+       * var first = $log.info.logs.unshift();
+       * ```
+       */
+      $log.info.logs = [];
+      /**
+       * @ngdoc property
+       * @name $log#warn.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#warn `warn()`}.
+       *
+       * @example
+       * ```js
+       * $log.warn('Some Warning');
+       * var first = $log.warn.logs.unshift();
+       * ```
+       */
+      $log.warn.logs = [];
+      /**
+       * @ngdoc property
+       * @name $log#error.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#error `error()`}.
+       *
+       * @example
+       * ```js
+       * $log.error('Some Error');
+       * var first = $log.error.logs.unshift();
+       * ```
+       */
+      $log.error.logs = [];
+        /**
+       * @ngdoc property
+       * @name $log#debug.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#debug `debug()`}.
+       *
+       * @example
+       * ```js
+       * $log.debug('Some Error');
+       * var first = $log.debug.logs.unshift();
+       * ```
+       */
+      $log.debug.logs = [];
+    };
+
+    /**
+     * @ngdoc method
+     * @name $log#assertEmpty
+     *
+     * @description
+     * Assert that all of the logging methods have no logged messages. If any messages are present,
+     * an exception is thrown.
+     */
+    $log.assertEmpty = function() {
+      var errors = [];
+      angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) {
+        angular.forEach($log[logLevel].logs, function(log) {
+          angular.forEach(log, function(logItem) {
+            errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' +
+                        (logItem.stack || ''));
+          });
+        });
+      });
+      if (errors.length) {
+        errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or " +
+          "an expected log message was not checked and removed:");
+        errors.push('');
+        throw new Error(errors.join('\n---------\n'));
+      }
+    };
+
+    $log.reset();
+    return $log;
+  };
+};
+
+
+/**
+ * @ngdoc service
+ * @name $interval
+ *
+ * @description
+ * Mock implementation of the $interval service.
+ *
+ * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
+ * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
+ * time.
+ *
+ * @param {function()} fn A function that should be called repeatedly.
+ * @param {number} delay Number of milliseconds between each function call.
+ * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
+ *   indefinitely.
+ * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+ *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+ * @param {...*=} Pass additional parameters to the executed function.
+ * @returns {promise} A promise which will be notified on each iteration.
+ */
+angular.mock.$IntervalProvider = function() {
+  this.$get = ['$browser', '$rootScope', '$q', '$$q',
+       function($browser,   $rootScope,   $q,   $$q) {
+    var repeatFns = [],
+        nextRepeatId = 0,
+        now = 0;
+
+    var $interval = function(fn, delay, count, invokeApply) {
+      var hasParams = arguments.length > 4,
+          args = hasParams ? Array.prototype.slice.call(arguments, 4) : [],
+          iteration = 0,
+          skipApply = (angular.isDefined(invokeApply) && !invokeApply),
+          deferred = (skipApply ? $$q : $q).defer(),
+          promise = deferred.promise;
+
+      count = (angular.isDefined(count)) ? count : 0;
+      promise.then(null, null, (!hasParams) ? fn : function() {
+        fn.apply(null, args);
+      });
+
+      promise.$$intervalId = nextRepeatId;
+
+      function tick() {
+        deferred.notify(iteration++);
+
+        if (count > 0 && iteration >= count) {
+          var fnIndex;
+          deferred.resolve(iteration);
+
+          angular.forEach(repeatFns, function(fn, index) {
+            if (fn.id === promise.$$intervalId) fnIndex = index;
+          });
+
+          if (angular.isDefined(fnIndex)) {
+            repeatFns.splice(fnIndex, 1);
+          }
+        }
+
+        if (skipApply) {
+          $browser.defer.flush();
+        } else {
+          $rootScope.$apply();
+        }
+      }
+
+      repeatFns.push({
+        nextTime:(now + delay),
+        delay: delay,
+        fn: tick,
+        id: nextRepeatId,
+        deferred: deferred
+      });
+      repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
+
+      nextRepeatId++;
+      return promise;
+    };
+    /**
+     * @ngdoc method
+     * @name $interval#cancel
+     *
+     * @description
+     * Cancels a task associated with the `promise`.
+     *
+     * @param {promise} promise A promise from calling the `$interval` function.
+     * @returns {boolean} Returns `true` if the task was successfully cancelled.
+     */
+    $interval.cancel = function(promise) {
+      if (!promise) return false;
+      var fnIndex;
+
+      angular.forEach(repeatFns, function(fn, index) {
+        if (fn.id === promise.$$intervalId) fnIndex = index;
+      });
+
+      if (angular.isDefined(fnIndex)) {
+        repeatFns[fnIndex].deferred.reject('canceled');
+        repeatFns.splice(fnIndex, 1);
+        return true;
+      }
+
+      return false;
+    };
+
+    /**
+     * @ngdoc method
+     * @name $interval#flush
+     * @description
+     *
+     * Runs interval tasks scheduled to be run in the next `millis` milliseconds.
+     *
+     * @param {number=} millis maximum timeout amount to flush up until.
+     *
+     * @return {number} The amount of time moved forward.
+     */
+    $interval.flush = function(millis) {
+      now += millis;
+      while (repeatFns.length && repeatFns[0].nextTime <= now) {
+        var task = repeatFns[0];
+        task.fn();
+        task.nextTime += task.delay;
+        repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
+      }
+      return millis;
+    };
+
+    return $interval;
+  }];
+};
+
+
+/* jshint -W101 */
+/* The R_ISO8061_STR regex is never going to fit into the 100 char limit!
+ * This directive should go inside the anonymous function but a bug in JSHint means that it would
+ * not be enacted early enough to prevent the warning.
+ */
+var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;
+
+function jsonStringToDate(string) {
+  var match;
+  if (match = string.match(R_ISO8061_STR)) {
+    var date = new Date(0),
+        tzHour = 0,
+        tzMin  = 0;
+    if (match[9]) {
+      tzHour = toInt(match[9] + match[10]);
+      tzMin = toInt(match[9] + match[11]);
+    }
+    date.setUTCFullYear(toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));
+    date.setUTCHours(toInt(match[4] || 0) - tzHour,
+                     toInt(match[5] || 0) - tzMin,
+                     toInt(match[6] || 0),
+                     toInt(match[7] || 0));
+    return date;
+  }
+  return string;
+}
+
+function toInt(str) {
+  return parseInt(str, 10);
+}
+
+function padNumber(num, digits, trim) {
+  var neg = '';
+  if (num < 0) {
+    neg =  '-';
+    num = -num;
+  }
+  num = '' + num;
+  while (num.length < digits) num = '0' + num;
+  if (trim) {
+    num = num.substr(num.length - digits);
+  }
+  return neg + num;
+}
+
+
+/**
+ * @ngdoc type
+ * @name angular.mock.TzDate
+ * @description
+ *
+ * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`.
+ *
+ * Mock of the Date type which has its timezone specified via constructor arg.
+ *
+ * The main purpose is to create Date-like instances with timezone fixed to the specified timezone
+ * offset, so that we can test code that depends on local timezone settings without dependency on
+ * the time zone settings of the machine where the code is running.
+ *
+ * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored)
+ * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC*
+ *
+ * @example
+ * !!!! WARNING !!!!!
+ * This is not a complete Date object so only methods that were implemented can be called safely.
+ * To make matters worse, TzDate instances inherit stuff from Date via a prototype.
+ *
+ * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is
+ * incomplete we might be missing some non-standard methods. This can result in errors like:
+ * "Date.prototype.foo called on incompatible Object".
+ *
+ * ```js
+ * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z');
+ * newYearInBratislava.getTimezoneOffset() => -60;
+ * newYearInBratislava.getFullYear() => 2010;
+ * newYearInBratislava.getMonth() => 0;
+ * newYearInBratislava.getDate() => 1;
+ * newYearInBratislava.getHours() => 0;
+ * newYearInBratislava.getMinutes() => 0;
+ * newYearInBratislava.getSeconds() => 0;
+ * ```
+ *
+ */
+angular.mock.TzDate = function(offset, timestamp) {
+  var self = new Date(0);
+  if (angular.isString(timestamp)) {
+    var tsStr = timestamp;
+
+    self.origDate = jsonStringToDate(timestamp);
+
+    timestamp = self.origDate.getTime();
+    if (isNaN(timestamp)) {
+      throw {
+        name: "Illegal Argument",
+        message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string"
+      };
+    }
+  } else {
+    self.origDate = new Date(timestamp);
+  }
+
+  var localOffset = new Date(timestamp).getTimezoneOffset();
+  self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60;
+  self.date = new Date(timestamp + self.offsetDiff);
+
+  self.getTime = function() {
+    return self.date.getTime() - self.offsetDiff;
+  };
+
+  self.toLocaleDateString = function() {
+    return self.date.toLocaleDateString();
+  };
+
+  self.getFullYear = function() {
+    return self.date.getFullYear();
+  };
+
+  self.getMonth = function() {
+    return self.date.getMonth();
+  };
+
+  self.getDate = function() {
+    return self.date.getDate();
+  };
+
+  self.getHours = function() {
+    return self.date.getHours();
+  };
+
+  self.getMinutes = function() {
+    return self.date.getMinutes();
+  };
+
+  self.getSeconds = function() {
+    return self.date.getSeconds();
+  };
+
+  self.getMilliseconds = function() {
+    return self.date.getMilliseconds();
+  };
+
+  self.getTimezoneOffset = function() {
+    return offset * 60;
+  };
+
+  self.getUTCFullYear = function() {
+    return self.origDate.getUTCFullYear();
+  };
+
+  self.getUTCMonth = function() {
+    return self.origDate.getUTCMonth();
+  };
+
+  self.getUTCDate = function() {
+    return self.origDate.getUTCDate();
+  };
+
+  self.getUTCHours = function() {
+    return self.origDate.getUTCHours();
+  };
+
+  self.getUTCMinutes = function() {
+    return self.origDate.getUTCMinutes();
+  };
+
+  self.getUTCSeconds = function() {
+    return self.origDate.getUTCSeconds();
+  };
+
+  self.getUTCMilliseconds = function() {
+    return self.origDate.getUTCMilliseconds();
+  };
+
+  self.getDay = function() {
+    return self.date.getDay();
+  };
+
+  // provide this method only on browsers that already have it
+  if (self.toISOString) {
+    self.toISOString = function() {
+      return padNumber(self.origDate.getUTCFullYear(), 4) + '-' +
+            padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' +
+            padNumber(self.origDate.getUTCDate(), 2) + 'T' +
+            padNumber(self.origDate.getUTCHours(), 2) + ':' +
+            padNumber(self.origDate.getUTCMinutes(), 2) + ':' +
+            padNumber(self.origDate.getUTCSeconds(), 2) + '.' +
+            padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z';
+    };
+  }
+
+  //hide all methods not implemented in this mock that the Date prototype exposes
+  var unimplementedMethods = ['getUTCDay',
+      'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
+      'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
+      'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',
+      'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString',
+      'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf'];
+
+  angular.forEach(unimplementedMethods, function(methodName) {
+    self[methodName] = function() {
+      throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock");
+    };
+  });
+
+  return self;
+};
+
+//make "tzDateInstance instanceof Date" return true
+angular.mock.TzDate.prototype = Date.prototype;
+/* jshint +W101 */
+
+
+/**
+ * @ngdoc service
+ * @name $animate
+ *
+ * @description
+ * Mock implementation of the {@link ng.$animate `$animate`} service. Exposes two additional methods
+ * for testing animations.
+ */
+angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
+
+  .config(['$provide', function($provide) {
+
+    $provide.factory('$$forceReflow', function() {
+      function reflowFn() {
+        reflowFn.totalReflows++;
+      }
+      reflowFn.totalReflows = 0;
+      return reflowFn;
+    });
+
+    $provide.factory('$$animateAsyncRun', function() {
+      var queue = [];
+      var queueFn = function() {
+        return function(fn) {
+          queue.push(fn);
+        };
+      };
+      queueFn.flush = function() {
+        if (queue.length === 0) return false;
+
+        for (var i = 0; i < queue.length; i++) {
+          queue[i]();
+        }
+        queue = [];
+
+        return true;
+      };
+      return queueFn;
+    });
+
+    $provide.decorator('$$animateJs', ['$delegate', function($delegate) {
+      var runners = [];
+
+      var animateJsConstructor = function() {
+        var animator = $delegate.apply($delegate, arguments);
+        // If no javascript animation is found, animator is undefined
+        if (animator) {
+          runners.push(animator);
+        }
+        return animator;
+      };
+
+      animateJsConstructor.$closeAndFlush = function() {
+        runners.forEach(function(runner) {
+          runner.end();
+        });
+        runners = [];
+      };
+
+      return animateJsConstructor;
+    }]);
+
+    $provide.decorator('$animateCss', ['$delegate', function($delegate) {
+      var runners = [];
+
+      var animateCssConstructor = function(element, options) {
+        var animator = $delegate(element, options);
+        runners.push(animator);
+        return animator;
+      };
+
+      animateCssConstructor.$closeAndFlush = function() {
+        runners.forEach(function(runner) {
+          runner.end();
+        });
+        runners = [];
+      };
+
+      return animateCssConstructor;
+    }]);
+
+    $provide.decorator('$animate', ['$delegate', '$timeout', '$browser', '$$rAF', '$animateCss', '$$animateJs',
+                                    '$$forceReflow', '$$animateAsyncRun', '$rootScope',
+                            function($delegate,   $timeout,   $browser,   $$rAF,   $animateCss,   $$animateJs,
+                                     $$forceReflow,   $$animateAsyncRun,  $rootScope) {
+      var animate = {
+        queue: [],
+        cancel: $delegate.cancel,
+        on: $delegate.on,
+        off: $delegate.off,
+        pin: $delegate.pin,
+        get reflows() {
+          return $$forceReflow.totalReflows;
+        },
+        enabled: $delegate.enabled,
+        /**
+         * @ngdoc method
+         * @name $animate#closeAndFlush
+         * @description
+         *
+         * This method will close all pending animations (both {@link ngAnimate#javascript-based-animations Javascript}
+         * and {@link ngAnimate.$animateCss CSS}) and it will also flush any remaining animation frames and/or callbacks.
+         */
+        closeAndFlush: function() {
+          // we allow the flush command to swallow the errors
+          // because depending on whether CSS or JS animations are
+          // used, there may not be a RAF flush. The primary flush
+          // at the end of this function must throw an exception
+          // because it will track if there were pending animations
+          this.flush(true);
+          $animateCss.$closeAndFlush();
+          $$animateJs.$closeAndFlush();
+          this.flush();
+        },
+        /**
+         * @ngdoc method
+         * @name $animate#flush
+         * @description
+         *
+         * This method is used to flush the pending callbacks and animation frames to either start
+         * an animation or conclude an animation. Note that this will not actually close an
+         * actively running animation (see {@link ngMock.$animate#closeAndFlush `closeAndFlush()`} for that).
+         */
+        flush: function(hideErrors) {
+          $rootScope.$digest();
+
+          var doNextRun, somethingFlushed = false;
+          do {
+            doNextRun = false;
+
+            if ($$rAF.queue.length) {
+              $$rAF.flush();
+              doNextRun = somethingFlushed = true;
+            }
+
+            if ($$animateAsyncRun.flush()) {
+              doNextRun = somethingFlushed = true;
+            }
+          } while (doNextRun);
+
+          if (!somethingFlushed && !hideErrors) {
+            throw new Error('No pending animations ready to be closed or flushed');
+          }
+
+          $rootScope.$digest();
+        }
+      };
+
+      angular.forEach(
+        ['animate','enter','leave','move','addClass','removeClass','setClass'], function(method) {
+        animate[method] = function() {
+          animate.queue.push({
+            event: method,
+            element: arguments[0],
+            options: arguments[arguments.length - 1],
+            args: arguments
+          });
+          return $delegate[method].apply($delegate, arguments);
+        };
+      });
+
+      return animate;
+    }]);
+
+  }]);
+
+
+/**
+ * @ngdoc function
+ * @name angular.mock.dump
+ * @description
+ *
+ * *NOTE*: this is not an injectable instance, just a globally available function.
+ *
+ * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for
+ * debugging.
+ *
+ * This method is also available on window, where it can be used to display objects on debug
+ * console.
+ *
+ * @param {*} object - any object to turn into string.
+ * @return {string} a serialized string of the argument
+ */
+angular.mock.dump = function(object) {
+  return serialize(object);
+
+  function serialize(object) {
+    var out;
+
+    if (angular.isElement(object)) {
+      object = angular.element(object);
+      out = angular.element('<div></div>');
+      angular.forEach(object, function(element) {
+        out.append(angular.element(element).clone());
+      });
+      out = out.html();
+    } else if (angular.isArray(object)) {
+      out = [];
+      angular.forEach(object, function(o) {
+        out.push(serialize(o));
+      });
+      out = '[ ' + out.join(', ') + ' ]';
+    } else if (angular.isObject(object)) {
+      if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) {
+        out = serializeScope(object);
+      } else if (object instanceof Error) {
+        out = object.stack || ('' + object.name + ': ' + object.message);
+      } else {
+        // TODO(i): this prevents methods being logged,
+        // we should have a better way to serialize objects
+        out = angular.toJson(object, true);
+      }
+    } else {
+      out = String(object);
+    }
+
+    return out;
+  }
+
+  function serializeScope(scope, offset) {
+    offset = offset ||  '  ';
+    var log = [offset + 'Scope(' + scope.$id + '): {'];
+    for (var key in scope) {
+      if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) {
+        log.push('  ' + key + ': ' + angular.toJson(scope[key]));
+      }
+    }
+    var child = scope.$$childHead;
+    while (child) {
+      log.push(serializeScope(child, offset + '  '));
+      child = child.$$nextSibling;
+    }
+    log.push('}');
+    return log.join('\n' + offset);
+  }
+};
+
+/**
+ * @ngdoc service
+ * @name $httpBackend
+ * @description
+ * Fake HTTP backend implementation suitable for unit testing applications that use the
+ * {@link ng.$http $http service}.
+ *
+ * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
+ * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.
+ *
+ * During unit testing, we want our unit tests to run quickly and have no external dependencies so
+ * we don\u2019t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or
+ * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is
+ * to verify whether a certain request has been sent or not, or alternatively just let the
+ * application make requests, respond with pre-trained responses and assert that the end result is
+ * what we expect it to be.
+ *
+ * This mock implementation can be used to respond with static or dynamic responses via the
+ * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc).
+ *
+ * When an Angular application needs some data from a server, it calls the $http service, which
+ * sends the request to a real server using $httpBackend service. With dependency injection, it is
+ * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify
+ * the requests and respond with some testing data without sending a request to a real server.
+ *
+ * There are two ways to specify what test data should be returned as http responses by the mock
+ * backend when the code under test makes http requests:
+ *
+ * - `$httpBackend.expect` - specifies a request expectation
+ * - `$httpBackend.when` - specifies a backend definition
+ *
+ *
+ * ## Request Expectations vs Backend Definitions
+ *
+ * Request expectations provide a way to make assertions about requests made by the application and
+ * to define responses for those requests. The test will fail if the expected requests are not made
+ * or they are made in the wrong order.
+ *
+ * Backend definitions allow you to define a fake backend for your application which doesn't assert
+ * if a particular request was made or not, it just returns a trained response if a request is made.
+ * The test will pass whether or not the request gets made during testing.
+ *
+ *
+ * <table class="table">
+ *   <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr>
+ *   <tr>
+ *     <th>Syntax</th>
+ *     <td>.expect(...).respond(...)</td>
+ *     <td>.when(...).respond(...)</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Typical usage</th>
+ *     <td>strict unit tests</td>
+ *     <td>loose (black-box) unit testing</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Fulfills multiple requests</th>
+ *     <td>NO</td>
+ *     <td>YES</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Order of requests matters</th>
+ *     <td>YES</td>
+ *     <td>NO</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Request required</th>
+ *     <td>YES</td>
+ *     <td>NO</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Response required</th>
+ *     <td>optional (see below)</td>
+ *     <td>YES</td>
+ *   </tr>
+ * </table>
+ *
+ * In cases where both backend definitions and request expectations are specified during unit
+ * testing, the request expectations are evaluated first.
+ *
+ * If a request expectation has no response specified, the algorithm will search your backend
+ * definitions for an appropriate response.
+ *
+ * If a request didn't match any expectation or if the expectation doesn't have the response
+ * defined, the backend definitions are evaluated in sequential order to see if any of them match
+ * the request. The response from the first matched definition is returned.
+ *
+ *
+ * ## Flushing HTTP requests
+ *
+ * The $httpBackend used in production always responds to requests asynchronously. If we preserved
+ * this behavior in unit testing, we'd have to create async unit tests, which are hard to write,
+ * to follow and to maintain. But neither can the testing mock respond synchronously; that would
+ * change the execution of the code under test. For this reason, the mock $httpBackend has a
+ * `flush()` method, which allows the test to explicitly flush pending requests. This preserves
+ * the async api of the backend, while allowing the test to execute synchronously.
+ *
+ *
+ * ## Unit testing with mock $httpBackend
+ * The following code shows how to setup and use the mock backend when unit testing a controller.
+ * First we create the controller under test:
+ *
+  ```js
+  // The module code
+  angular
+    .module('MyApp', [])
+    .controller('MyController', MyController);
+
+  // The controller code
+  function MyController($scope, $http) {
+    var authToken;
+
+    $http.get('/auth.py').then(function(response) {
+      authToken = response.headers('A-Token');
+      $scope.user = response.data;
+    });
+
+    $scope.saveMessage = function(message) {
+      var headers = { 'Authorization': authToken };
+      $scope.status = 'Saving...';
+
+      $http.post('/add-msg.py', message, { headers: headers } ).then(function(response) {
+        $scope.status = '';
+      }).catch(function() {
+        $scope.status = 'Failed...';
+      });
+    };
+  }
+  ```
+ *
+ * Now we setup the mock backend and create the test specs:
+ *
+  ```js
+    // testing controller
+    describe('MyController', function() {
+       var $httpBackend, $rootScope, createController, authRequestHandler;
+
+       // Set up the module
+       beforeEach(module('MyApp'));
+
+       beforeEach(inject(function($injector) {
+         // Set up the mock http service responses
+         $httpBackend = $injector.get('$httpBackend');
+         // backend definition common for all tests
+         authRequestHandler = $httpBackend.when('GET', '/auth.py')
+                                .respond({userId: 'userX'}, {'A-Token': 'xxx'});
+
+         // Get hold of a scope (i.e. the root scope)
+         $rootScope = $injector.get('$rootScope');
+         // The $controller service is used to create instances of controllers
+         var $controller = $injector.get('$controller');
+
+         createController = function() {
+           return $controller('MyController', {'$scope' : $rootScope });
+         };
+       }));
+
+
+       afterEach(function() {
+         $httpBackend.verifyNoOutstandingExpectation();
+         $httpBackend.verifyNoOutstandingRequest();
+       });
+
+
+       it('should fetch authentication token', function() {
+         $httpBackend.expectGET('/auth.py');
+         var controller = createController();
+         $httpBackend.flush();
+       });
+
+
+       it('should fail authentication', function() {
+
+         // Notice how you can change the response even after it was set
+         authRequestHandler.respond(401, '');
+
+         $httpBackend.expectGET('/auth.py');
+         var controller = createController();
+         $httpBackend.flush();
+         expect($rootScope.status).toBe('Failed...');
+       });
+
+
+       it('should send msg to server', function() {
+         var controller = createController();
+         $httpBackend.flush();
+
+         // now you don\u2019t care about the authentication, but
+         // the controller will still send the request and
+         // $httpBackend will respond without you having to
+         // specify the expectation and response for this request
+
+         $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
+         $rootScope.saveMessage('message content');
+         expect($rootScope.status).toBe('Saving...');
+         $httpBackend.flush();
+         expect($rootScope.status).toBe('');
+       });
+
+
+       it('should send auth header', function() {
+         var controller = createController();
+         $httpBackend.flush();
+
+         $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
+           // check if the header was sent, if it wasn't the expectation won't
+           // match the request and the test will fail
+           return headers['Authorization'] == 'xxx';
+         }).respond(201, '');
+
+         $rootScope.saveMessage('whatever');
+         $httpBackend.flush();
+       });
+    });
+  ```
+ *
+ * ## Dynamic responses
+ *
+ * You define a response to a request by chaining a call to `respond()` onto a definition or expectation.
+ * If you provide a **callback** as the first parameter to `respond(callback)` then you can dynamically generate
+ * a response based on the properties of the request.
+ *
+ * The `callback` function should be of the form `function(method, url, data, headers, params)`.
+ *
+ * ### Query parameters
+ *
+ * By default, query parameters on request URLs are parsed into the `params` object. So a request URL
+ * of `/list?q=searchstr&orderby=-name` would set `params` to be `{q: 'searchstr', orderby: '-name'}`.
+ *
+ * ### Regex parameter matching
+ *
+ * If an expectation or definition uses a **regex** to match the URL, you can provide an array of **keys** via a
+ * `params` argument. The index of each **key** in the array will match the index of a **group** in the
+ * **regex**.
+ *
+ * The `params` object in the **callback** will now have properties with these keys, which hold the value of the
+ * corresponding **group** in the **regex**.
+ *
+ * This also applies to the `when` and `expect` shortcut methods.
+ *
+ *
+ * ```js
+ *   $httpBackend.expect('GET', /\/user\/(.+)/, undefined, undefined, ['id'])
+ *     .respond(function(method, url, data, headers, params) {
+ *       // for requested url of '/user/1234' params is {id: '1234'}
+ *     });
+ *
+ *   $httpBackend.whenPATCH(/\/user\/(.+)\/article\/(.+)/, undefined, undefined, ['user', 'article'])
+ *     .respond(function(method, url, data, headers, params) {
+ *       // for url of '/user/1234/article/567' params is {user: '1234', article: '567'}
+ *     });
+ * ```
+ *
+ * ## Matching route requests
+ *
+ * For extra convenience, `whenRoute` and `expectRoute` shortcuts are available. These methods offer colon
+ * delimited matching of the url path, ignoring the query string. This allows declarations
+ * similar to how application routes are configured with `$routeProvider`. Because these methods convert
+ * the definition url to regex, declaration order is important. Combined with query parameter parsing,
+ * the following is possible:
+ *
+  ```js
+    $httpBackend.whenRoute('GET', '/users/:id')
+      .respond(function(method, url, data, headers, params) {
+        return [200, MockUserList[Number(params.id)]];
+      });
+
+    $httpBackend.whenRoute('GET', '/users')
+      .respond(function(method, url, data, headers, params) {
+        var userList = angular.copy(MockUserList),
+          defaultSort = 'lastName',
+          count, pages, isPrevious, isNext;
+
+        // paged api response '/v1/users?page=2'
+        params.page = Number(params.page) || 1;
+
+        // query for last names '/v1/users?q=Archer'
+        if (params.q) {
+          userList = $filter('filter')({lastName: params.q});
+        }
+
+        pages = Math.ceil(userList.length / pagingLength);
+        isPrevious = params.page > 1;
+        isNext = params.page < pages;
+
+        return [200, {
+          count:    userList.length,
+          previous: isPrevious,
+          next:     isNext,
+          // sort field -> '/v1/users?sortBy=firstName'
+          results:  $filter('orderBy')(userList, params.sortBy || defaultSort)
+                      .splice((params.page - 1) * pagingLength, pagingLength)
+        }];
+      });
+  ```
+ */
+angular.mock.$HttpBackendProvider = function() {
+  this.$get = ['$rootScope', '$timeout', createHttpBackendMock];
+};
+
+/**
+ * General factory function for $httpBackend mock.
+ * Returns instance for unit testing (when no arguments specified):
+ *   - passing through is disabled
+ *   - auto flushing is disabled
+ *
+ * Returns instance for e2e testing (when `$delegate` and `$browser` specified):
+ *   - passing through (delegating request to real backend) is enabled
+ *   - auto flushing is enabled
+ *
+ * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified)
+ * @param {Object=} $browser Auto-flushing enabled if specified
+ * @return {Object} Instance of $httpBackend mock
+ */
+function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
+  var definitions = [],
+      expectations = [],
+      responses = [],
+      responsesPush = angular.bind(responses, responses.push),
+      copy = angular.copy;
+
+  function createResponse(status, data, headers, statusText) {
+    if (angular.isFunction(status)) return status;
+
+    return function() {
+      return angular.isNumber(status)
+          ? [status, data, headers, statusText]
+          : [200, status, data, headers];
+    };
+  }
+
+  // TODO(vojta): change params to: method, url, data, headers, callback
+  function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) {
+    var xhr = new MockXhr(),
+        expectation = expectations[0],
+        wasExpected = false;
+
+    function prettyPrint(data) {
+      return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp)
+          ? data
+          : angular.toJson(data);
+    }
+
+    function wrapResponse(wrapped) {
+      if (!$browser && timeout) {
+        timeout.then ? timeout.then(handleTimeout) : $timeout(handleTimeout, timeout);
+      }
+
+      return handleResponse;
+
+      function handleResponse() {
+        var response = wrapped.response(method, url, data, headers, wrapped.params(url));
+        xhr.$$respHeaders = response[2];
+        callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(),
+                 copy(response[3] || ''));
+      }
+
+      function handleTimeout() {
+        for (var i = 0, ii = responses.length; i < ii; i++) {
+          if (responses[i] === handleResponse) {
+            responses.splice(i, 1);
+            callback(-1, undefined, '');
+            break;
+          }
+        }
+      }
+    }
+
+    if (expectation && expectation.match(method, url)) {
+      if (!expectation.matchData(data)) {
+        throw new Error('Expected ' + expectation + ' with different data\n' +
+            'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT:      ' + data);
+      }
+
+      if (!expectation.matchHeaders(headers)) {
+        throw new Error('Expected ' + expectation + ' with different headers\n' +
+                        'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT:      ' +
+                        prettyPrint(headers));
+      }
+
+      expectations.shift();
+
+      if (expectation.response) {
+        responses.push(wrapResponse(expectation));
+        return;
+      }
+      wasExpected = true;
+    }
+
+    var i = -1, definition;
+    while ((definition = definitions[++i])) {
+      if (definition.match(method, url, data, headers || {})) {
+        if (definition.response) {
+          // if $browser specified, we do auto flush all requests
+          ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
+        } else if (definition.passThrough) {
+          $delegate(method, url, data, callback, headers, timeout, withCredentials);
+        } else throw new Error('No response defined !');
+        return;
+      }
+    }
+    throw wasExpected ?
+        new Error('No response defined !') :
+        new Error('Unexpected request: ' + method + ' ' + url + '\n' +
+                  (expectation ? 'Expected ' + expectation : 'No more request expected'));
+  }
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#when
+   * @description
+   * Creates a new backend definition.
+   *
+   * @param {string} method HTTP method.
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+   *   data string and returns true if the data is as expected.
+   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
+   *   object and returns true if the headers match the current definition.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   *
+   *  - respond \u2013
+   *      `{function([status,] data[, headers, statusText])
+   *      | function(function(method, url, data, headers, params)}`
+   *    \u2013 The respond method takes a set of static data to be returned or a function that can
+   *    return an array containing response status (number), response data (string), response
+   *    headers (Object), and the text for the status (string). The respond method returns the
+   *    `requestHandler` object for possible overrides.
+   */
+  $httpBackend.when = function(method, url, data, headers, keys) {
+    var definition = new MockHttpExpectation(method, url, data, headers, keys),
+        chain = {
+          respond: function(status, data, headers, statusText) {
+            definition.passThrough = undefined;
+            definition.response = createResponse(status, data, headers, statusText);
+            return chain;
+          }
+        };
+
+    if ($browser) {
+      chain.passThrough = function() {
+        definition.response = undefined;
+        definition.passThrough = true;
+        return chain;
+      };
+    }
+
+    definitions.push(definition);
+    return chain;
+  };
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenGET
+   * @description
+   * Creates a new backend definition for GET requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenHEAD
+   * @description
+   * Creates a new backend definition for HEAD requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenDELETE
+   * @description
+   * Creates a new backend definition for DELETE requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenPOST
+   * @description
+   * Creates a new backend definition for POST requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+   *   data string and returns true if the data is as expected.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenPUT
+   * @description
+   * Creates a new backend definition for PUT requests.  For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+   *   data string and returns true if the data is as expected.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenJSONP
+   * @description
+   * Creates a new backend definition for JSONP requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+  createShortMethods('when');
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenRoute
+   * @description
+   * Creates a new backend definition that compares only with the requested route.
+   *
+   * @param {string} method HTTP method.
+   * @param {string} url HTTP url string that supports colon param matching.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled. See #when for more info.
+   */
+  $httpBackend.whenRoute = function(method, url) {
+    var pathObj = parseRoute(url);
+    return $httpBackend.when(method, pathObj.regexp, undefined, undefined, pathObj.keys);
+  };
+
+  function parseRoute(url) {
+    var ret = {
+      regexp: url
+    },
+    keys = ret.keys = [];
+
+    if (!url || !angular.isString(url)) return ret;
+
+    url = url
+      .replace(/([().])/g, '\\$1')
+      .replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option) {
+        var optional = option === '?' ? option : null;
+        var star = option === '*' ? option : null;
+        keys.push({ name: key, optional: !!optional });
+        slash = slash || '';
+        return ''
+          + (optional ? '' : slash)
+          + '(?:'
+          + (optional ? slash : '')
+          + (star && '(.+?)' || '([^/]+)')
+          + (optional || '')
+          + ')'
+          + (optional || '');
+      })
+      .replace(/([\/$\*])/g, '\\$1');
+
+    ret.regexp = new RegExp('^' + url, 'i');
+    return ret;
+  }
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expect
+   * @description
+   * Creates a new request expectation.
+   *
+   * @param {string} method HTTP method.
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
+   *   object and returns true if the headers match the current expectation.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *  request is handled. You can save this object for later use and invoke `respond` again in
+   *  order to change how a matched request is handled.
+   *
+   *  - respond \u2013
+   *    `{function([status,] data[, headers, statusText])
+   *    | function(function(method, url, data, headers, params)}`
+   *    \u2013 The respond method takes a set of static data to be returned or a function that can
+   *    return an array containing response status (number), response data (string), response
+   *    headers (Object), and the text for the status (string). The respond method returns the
+   *    `requestHandler` object for possible overrides.
+   */
+  $httpBackend.expect = function(method, url, data, headers, keys) {
+    var expectation = new MockHttpExpectation(method, url, data, headers, keys),
+        chain = {
+          respond: function(status, data, headers, statusText) {
+            expectation.response = createResponse(status, data, headers, statusText);
+            return chain;
+          }
+        };
+
+    expectations.push(expectation);
+    return chain;
+  };
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectGET
+   * @description
+   * Creates a new request expectation for GET requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {Object=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled. See #expect for more info.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectHEAD
+   * @description
+   * Creates a new request expectation for HEAD requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {Object=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectDELETE
+   * @description
+   * Creates a new request expectation for DELETE requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {Object=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectPOST
+   * @description
+   * Creates a new request expectation for POST requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {Object=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectPUT
+   * @description
+   * Creates a new request expectation for PUT requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {Object=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectPATCH
+   * @description
+   * Creates a new request expectation for PATCH requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {Object=} headers HTTP headers.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectJSONP
+   * @description
+   * Creates a new request expectation for JSONP requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives an url
+   *   and returns true if the url matches the current definition.
+   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+  createShortMethods('expect');
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectRoute
+   * @description
+   * Creates a new request expectation that compares only with the requested route.
+   *
+   * @param {string} method HTTP method.
+   * @param {string} url HTTP url string that supports colon param matching.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled. See #expect for more info.
+   */
+  $httpBackend.expectRoute = function(method, url) {
+    var pathObj = parseRoute(url);
+    return $httpBackend.expect(method, pathObj.regexp, undefined, undefined, pathObj.keys);
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#flush
+   * @description
+   * Flushes all pending requests using the trained responses.
+   *
+   * @param {number=} count Number of responses to flush (in the order they arrived). If undefined,
+   *   all pending requests will be flushed. If there are no pending requests when the flush method
+   *   is called an exception is thrown (as this typically a sign of programming error).
+   */
+  $httpBackend.flush = function(count, digest) {
+    if (digest !== false) $rootScope.$digest();
+    if (!responses.length) throw new Error('No pending request to flush !');
+
+    if (angular.isDefined(count) && count !== null) {
+      while (count--) {
+        if (!responses.length) throw new Error('No more pending request to flush !');
+        responses.shift()();
+      }
+    } else {
+      while (responses.length) {
+        responses.shift()();
+      }
+    }
+    $httpBackend.verifyNoOutstandingExpectation(digest);
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#verifyNoOutstandingExpectation
+   * @description
+   * Verifies that all of the requests defined via the `expect` api were made. If any of the
+   * requests were not made, verifyNoOutstandingExpectation throws an exception.
+   *
+   * Typically, you would call this method following each test case that asserts requests using an
+   * "afterEach" clause.
+   *
+   * ```js
+   *   afterEach($httpBackend.verifyNoOutstandingExpectation);
+   * ```
+   */
+  $httpBackend.verifyNoOutstandingExpectation = function(digest) {
+    if (digest !== false) $rootScope.$digest();
+    if (expectations.length) {
+      throw new Error('Unsatisfied requests: ' + expectations.join(', '));
+    }
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#verifyNoOutstandingRequest
+   * @description
+   * Verifies that there are no outstanding requests that need to be flushed.
+   *
+   * Typically, you would call this method following each test case that asserts requests using an
+   * "afterEach" clause.
+   *
+   * ```js
+   *   afterEach($httpBackend.verifyNoOutstandingRequest);
+   * ```
+   */
+  $httpBackend.verifyNoOutstandingRequest = function() {
+    if (responses.length) {
+      throw new Error('Unflushed requests: ' + responses.length);
+    }
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#resetExpectations
+   * @description
+   * Resets all request expectations, but preserves all backend definitions. Typically, you would
+   * call resetExpectations during a multiple-phase test when you want to reuse the same instance of
+   * $httpBackend mock.
+   */
+  $httpBackend.resetExpectations = function() {
+    expectations.length = 0;
+    responses.length = 0;
+  };
+
+  return $httpBackend;
+
+
+  function createShortMethods(prefix) {
+    angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {
+     $httpBackend[prefix + method] = function(url, headers, keys) {
+       return $httpBackend[prefix](method, url, undefined, headers, keys);
+     };
+    });
+
+    angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {
+      $httpBackend[prefix + method] = function(url, data, headers, keys) {
+        return $httpBackend[prefix](method, url, data, headers, keys);
+      };
+    });
+  }
+}
+
+function MockHttpExpectation(method, url, data, headers, keys) {
+
+  this.data = data;
+  this.headers = headers;
+
+  this.match = function(m, u, d, h) {
+    if (method != m) return false;
+    if (!this.matchUrl(u)) return false;
+    if (angular.isDefined(d) && !this.matchData(d)) return false;
+    if (angular.isDefined(h) && !this.matchHeaders(h)) return false;
+    return true;
+  };
+
+  this.matchUrl = function(u) {
+    if (!url) return true;
+    if (angular.isFunction(url.test)) return url.test(u);
+    if (angular.isFunction(url)) return url(u);
+    return url == u;
+  };
+
+  this.matchHeaders = function(h) {
+    if (angular.isUndefined(headers)) return true;
+    if (angular.isFunction(headers)) return headers(h);
+    return angular.equals(headers, h);
+  };
+
+  this.matchData = function(d) {
+    if (angular.isUndefined(data)) return true;
+    if (data && angular.isFunction(data.test)) return data.test(d);
+    if (data && angular.isFunction(data)) return data(d);
+    if (data && !angular.isString(data)) {
+      return angular.equals(angular.fromJson(angular.toJson(data)), angular.fromJson(d));
+    }
+    return data == d;
+  };
+
+  this.toString = function() {
+    return method + ' ' + url;
+  };
+
+  this.params = function(u) {
+    return angular.extend(parseQuery(), pathParams());
+
+    function pathParams() {
+      var keyObj = {};
+      if (!url || !angular.isFunction(url.test) || !keys || keys.length === 0) return keyObj;
+
+      var m = url.exec(u);
+      if (!m) return keyObj;
+      for (var i = 1, len = m.length; i < len; ++i) {
+        var key = keys[i - 1];
+        var val = m[i];
+        if (key && val) {
+          keyObj[key.name || key] = val;
+        }
+      }
+
+      return keyObj;
+    }
+
+    function parseQuery() {
+      var obj = {}, key_value, key,
+          queryStr = u.indexOf('?') > -1
+          ? u.substring(u.indexOf('?') + 1)
+          : "";
+
+      angular.forEach(queryStr.split('&'), function(keyValue) {
+        if (keyValue) {
+          key_value = keyValue.replace(/\+/g,'%20').split('=');
+          key = tryDecodeURIComponent(key_value[0]);
+          if (angular.isDefined(key)) {
+            var val = angular.isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
+            if (!hasOwnProperty.call(obj, key)) {
+              obj[key] = val;
+            } else if (angular.isArray(obj[key])) {
+              obj[key].push(val);
+            } else {
+              obj[key] = [obj[key],val];
+            }
+          }
+        }
+      });
+      return obj;
+    }
+    function tryDecodeURIComponent(value) {
+      try {
+        return decodeURIComponent(value);
+      } catch (e) {
+        // Ignore any invalid uri component
+      }
+    }
+  };
+}
+
+function createMockXhr() {
+  return new MockXhr();
+}
+
+function MockXhr() {
+
+  // hack for testing $http, $httpBackend
+  MockXhr.$$lastInstance = this;
+
+  this.open = function(method, url, async) {
+    this.$$method = method;
+    this.$$url = url;
+    this.$$async = async;
+    this.$$reqHeaders = {};
+    this.$$respHeaders = {};
+  };
+
+  this.send = function(data) {
+    this.$$data = data;
+  };
+
+  this.setRequestHeader = function(key, value) {
+    this.$$reqHeaders[key] = value;
+  };
+
+  this.getResponseHeader = function(name) {
+    // the lookup must be case insensitive,
+    // that's why we try two quick lookups first and full scan last
+    var header = this.$$respHeaders[name];
+    if (header) return header;
+
+    name = angular.lowercase(name);
+    header = this.$$respHeaders[name];
+    if (header) return header;
+
+    header = undefined;
+    angular.forEach(this.$$respHeaders, function(headerVal, headerName) {
+      if (!header && angular.lowercase(headerName) == name) header = headerVal;
+    });
+    return header;
+  };
+
+  this.getAllResponseHeaders = function() {
+    var lines = [];
+
+    angular.forEach(this.$$respHeaders, function(value, key) {
+      lines.push(key + ': ' + value);
+    });
+    return lines.join('\n');
+  };
+
+  this.abort = angular.noop;
+}
+
+
+/**
+ * @ngdoc service
+ * @name $timeout
+ * @description
+ *
+ * This service is just a simple decorator for {@link ng.$timeout $timeout} service
+ * that adds a "flush" and "verifyNoPendingTasks" methods.
+ */
+
+angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $browser) {
+
+  /**
+   * @ngdoc method
+   * @name $timeout#flush
+   * @description
+   *
+   * Flushes the queue of pending tasks.
+   *
+   * @param {number=} delay maximum timeout amount to flush up until
+   */
+  $delegate.flush = function(delay) {
+    $browser.defer.flush(delay);
+  };
+
+  /**
+   * @ngdoc method
+   * @name $timeout#verifyNoPendingTasks
+   * @description
+   *
+   * Verifies that there are no pending tasks that need to be flushed.
+   */
+  $delegate.verifyNoPendingTasks = function() {
+    if ($browser.deferredFns.length) {
+      throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
+          formatPendingTasksAsString($browser.deferredFns));
+    }
+  };
+
+  function formatPendingTasksAsString(tasks) {
+    var result = [];
+    angular.forEach(tasks, function(task) {
+      result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');
+    });
+
+    return result.join(', ');
+  }
+
+  return $delegate;
+}];
+
+angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
+  var rafFn = function(fn) {
+    var index = rafFn.queue.length;
+    rafFn.queue.push(fn);
+    return function() {
+      rafFn.queue.splice(index, 1);
+    };
+  };
+
+  rafFn.queue = [];
+  rafFn.supported = $delegate.supported;
+
+  rafFn.flush = function() {
+    if (rafFn.queue.length === 0) {
+      throw new Error('No rAF callbacks present');
+    }
+
+    var length = rafFn.queue.length;
+    for (var i = 0; i < length; i++) {
+      rafFn.queue[i]();
+    }
+
+    rafFn.queue = rafFn.queue.slice(i);
+  };
+
+  return rafFn;
+}];
+
+/**
+ *
+ */
+angular.mock.$RootElementProvider = function() {
+  this.$get = function() {
+    return angular.element('<div ng-app></div>');
+  };
+};
+
+/**
+ * @ngdoc service
+ * @name $controller
+ * @description
+ * A decorator for {@link ng.$controller} with additional `bindings` parameter, useful when testing
+ * controllers of directives that use {@link $compile#-bindtocontroller- `bindToController`}.
+ *
+ *
+ * ## Example
+ *
+ * ```js
+ *
+ * // Directive definition ...
+ *
+ * myMod.directive('myDirective', {
+ *   controller: 'MyDirectiveController',
+ *   bindToController: {
+ *     name: '@'
+ *   }
+ * });
+ *
+ *
+ * // Controller definition ...
+ *
+ * myMod.controller('MyDirectiveController', ['$log', function($log) {
+ *   $log.info(this.name);
+ * })];
+ *
+ *
+ * // In a test ...
+ *
+ * describe('myDirectiveController', function() {
+ *   it('should write the bound name to the log', inject(function($controller, $log) {
+ *     var ctrl = $controller('MyDirectiveController', { /* no locals &#42;/ }, { name: 'Clark Kent' });
+ *     expect(ctrl.name).toEqual('Clark Kent');
+ *     expect($log.info.logs).toEqual(['Clark Kent']);
+ *   });
+ * });
+ *
+ * ```
+ *
+ * @param {Function|string} constructor If called with a function then it's considered to be the
+ *    controller constructor function. Otherwise it's considered to be a string which is used
+ *    to retrieve the controller constructor using the following steps:
+ *
+ *    * check if a controller with given name is registered via `$controllerProvider`
+ *    * check if evaluating the string on the current scope returns a constructor
+ *    * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
+ *      `window` object (not recommended)
+ *
+ *    The string can use the `controller as property` syntax, where the controller instance is published
+ *    as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
+ *    to work correctly.
+ *
+ * @param {Object} locals Injection locals for Controller.
+ * @param {Object=} bindings Properties to add to the controller before invoking the constructor. This is used
+ *                           to simulate the `bindToController` feature and simplify certain kinds of tests.
+ * @return {Object} Instance of given controller.
+ */
+angular.mock.$ControllerDecorator = ['$delegate', function($delegate) {
+  return function(expression, locals, later, ident) {
+    if (later && typeof later === 'object') {
+      var create = $delegate(expression, locals, true, ident);
+      angular.extend(create.instance, later);
+      return create();
+    }
+    return $delegate(expression, locals, later, ident);
+  };
+}];
+
+/**
+ * @ngdoc service
+ * @name $componentController
+ * @description
+ * A service that can be used to create instances of component controllers.
+ * <div class="alert alert-info">
+ * Be aware that the controller will be instantiated and attached to the scope as specified in
+ * the component definition object. That means that you must always provide a `$scope` object
+ * in the `locals` param.
+ * </div>
+ * @param {string} componentName the name of the component whose controller we want to instantiate
+ * @param {Object} locals Injection locals for Controller.
+ * @param {Object=} bindings Properties to add to the controller before invoking the constructor. This is used
+ *                           to simulate the `bindToController` feature and simplify certain kinds of tests.
+ * @param {string=} ident Override the property name to use when attaching the controller to the scope.
+ * @return {Object} Instance of requested controller.
+ */
+angular.mock.$ComponentControllerProvider = ['$compileProvider', function($compileProvider) {
+  return {
+    $get: ['$controller','$injector', function($controller,$injector) {
+      return function $componentController(componentName, locals, bindings, ident) {
+        // get all directives associated to the component name
+        var directives = $injector.get(componentName + 'Directive');
+        // look for those directives that are components
+        var candidateDirectives = directives.filter(function(directiveInfo) {
+          // components have controller, controllerAs and restrict:'E'
+          return directiveInfo.controller && directiveInfo.controllerAs && directiveInfo.restrict === 'E';
+        });
+        // check if valid directives found
+        if (candidateDirectives.length === 0) {
+          throw new Error('No component found');
+        }
+        if (candidateDirectives.length > 1) {
+          throw new Error('Too many components found');
+        }
+        // get the info of the component
+        var directiveInfo = candidateDirectives[0];
+        return $controller(directiveInfo.controller, locals, bindings, ident || directiveInfo.controllerAs);
+      };
+    }]
+  };
+}];
+
+
+/**
+ * @ngdoc module
+ * @name ngMock
+ * @packageName angular-mocks
+ * @description
+ *
+ * # ngMock
+ *
+ * The `ngMock` module provides support to inject and mock Angular services into unit tests.
+ * In addition, ngMock also extends various core ng services such that they can be
+ * inspected and controlled in a synchronous manner within test code.
+ *
+ *
+ * <div doc-module-components="ngMock"></div>
+ *
+ */
+angular.module('ngMock', ['ng']).provider({
+  $browser: angular.mock.$BrowserProvider,
+  $exceptionHandler: angular.mock.$ExceptionHandlerProvider,
+  $log: angular.mock.$LogProvider,
+  $interval: angular.mock.$IntervalProvider,
+  $httpBackend: angular.mock.$HttpBackendProvider,
+  $rootElement: angular.mock.$RootElementProvider,
+  $componentController: angular.mock.$ComponentControllerProvider
+}).config(['$provide', function($provide) {
+  $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
+  $provide.decorator('$$rAF', angular.mock.$RAFDecorator);
+  $provide.decorator('$rootScope', angular.mock.$RootScopeDecorator);
+  $provide.decorator('$controller', angular.mock.$ControllerDecorator);
+}]);
+
+/**
+ * @ngdoc module
+ * @name ngMockE2E
+ * @module ngMockE2E
+ * @packageName angular-mocks
+ * @description
+ *
+ * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing.
+ * Currently there is only one mock present in this module -
+ * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock.
+ */
+angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
+  $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
+}]);
+
+/**
+ * @ngdoc service
+ * @name $httpBackend
+ * @module ngMockE2E
+ * @description
+ * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of
+ * applications that use the {@link ng.$http $http service}.
+ *
+ * *Note*: For fake http backend implementation suitable for unit testing please see
+ * {@link ngMock.$httpBackend unit-testing $httpBackend mock}.
+ *
+ * This implementation can be used to respond with static or dynamic responses via the `when` api
+ * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the
+ * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch
+ * templates from a webserver).
+ *
+ * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application
+ * is being developed with the real backend api replaced with a mock, it is often desirable for
+ * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch
+ * templates or static files from the webserver). To configure the backend with this behavior
+ * use the `passThrough` request handler of `when` instead of `respond`.
+ *
+ * Additionally, we don't want to manually have to flush mocked out requests like we do during unit
+ * testing. For this reason the e2e $httpBackend flushes mocked out requests
+ * automatically, closely simulating the behavior of the XMLHttpRequest object.
+ *
+ * To setup the application to run with this http backend, you have to create a module that depends
+ * on the `ngMockE2E` and your application modules and defines the fake backend:
+ *
+ * ```js
+ *   myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
+ *   myAppDev.run(function($httpBackend) {
+ *     phones = [{name: 'phone1'}, {name: 'phone2'}];
+ *
+ *     // returns the current list of phones
+ *     $httpBackend.whenGET('/phones').respond(phones);
+ *
+ *     // adds a new phone to the phones array
+ *     $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
+ *       var phone = angular.fromJson(data);
+ *       phones.push(phone);
+ *       return [200, phone, {}];
+ *     });
+ *     $httpBackend.whenGET(/^\/templates\//).passThrough();
+ *     //...
+ *   });
+ * ```
+ *
+ * Afterwards, bootstrap your app with this new module.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#when
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition.
+ *
+ * @param {string} method HTTP method.
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
+ *   object and returns true if the headers match the current definition.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ *
+ *  - respond \u2013
+ *    `{function([status,] data[, headers, statusText])
+ *    | function(function(method, url, data, headers, params)}`
+ *    \u2013 The respond method takes a set of static data to be returned or a function that can return
+ *    an array containing response status (number), response data (string), response headers
+ *    (Object), and the text for the status (string).
+ *  - passThrough \u2013 `{function()}` \u2013 Any request matching a backend definition with
+ *    `passThrough` handler will be passed through to the real backend (an XHR request will be made
+ *    to the server.)
+ *  - Both methods return the `requestHandler` object for possible overrides.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenGET
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for GET requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenHEAD
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for HEAD requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenDELETE
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for DELETE requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenPOST
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for POST requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenPUT
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for PUT requests.  For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenPATCH
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for PATCH requests.  For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenJSONP
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for JSONP requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ *   {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenRoute
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition that compares only with the requested route.
+ *
+ * @param {string} method HTTP method.
+ * @param {string} url HTTP url string that supports colon param matching.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use

<TRUNCATED>

[09/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw.js
new file mode 100644
index 0000000..1180602
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Ku cyumweru",
+      "Kuwa mbere",
+      "Kuwa kabiri",
+      "Kuwa gatatu",
+      "Kuwa kane",
+      "Kuwa gatanu",
+      "Kuwa gatandatu"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mutarama",
+      "Gashyantare",
+      "Werurwe",
+      "Mata",
+      "Gicuransi",
+      "Kamena",
+      "Nyakanga",
+      "Kanama",
+      "Nzeli",
+      "Ukwakira",
+      "Ugushyingo",
+      "Ukuboza"
+    ],
+    "SHORTDAY": [
+      "cyu.",
+      "mbe.",
+      "kab.",
+      "gtu.",
+      "kan.",
+      "gnu.",
+      "gnd."
+    ],
+    "SHORTMONTH": [
+      "mut.",
+      "gas.",
+      "wer.",
+      "mat.",
+      "gic.",
+      "kam.",
+      "nya.",
+      "kan.",
+      "nze.",
+      "ukw.",
+      "ugu.",
+      "uku."
+    ],
+    "STANDALONEMONTH": [
+      "Mutarama",
+      "Gashyantare",
+      "Werurwe",
+      "Mata",
+      "Gicuransi",
+      "Kamena",
+      "Nyakanga",
+      "Kanama",
+      "Nzeli",
+      "Ukwakira",
+      "Ugushyingo",
+      "Ukuboza"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RF",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "rw",
+  "localeID": "rw",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk-tz.js
new file mode 100644
index 0000000..7e84593
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "utuko",
+      "kyiukonyi"
+    ],
+    "DAY": [
+      "Jumapilyi",
+      "Jumatatuu",
+      "Jumanne",
+      "Jumatanu",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristu",
+      "Baada ya Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "rwk-tz",
+  "localeID": "rwk_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk.js
new file mode 100644
index 0000000..8d4aae4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_rwk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "utuko",
+      "kyiukonyi"
+    ],
+    "DAY": [
+      "Jumapilyi",
+      "Jumatatuu",
+      "Jumanne",
+      "Jumatanu",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristu",
+      "Baada ya Kristu"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprilyi",
+      "Mei",
+      "Junyi",
+      "Julyai",
+      "Agusti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "rwk",
+  "localeID": "rwk",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah-ru.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah-ru.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah-ru.js
new file mode 100644
index 0000000..24c2aa4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah-ru.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u042d\u0418",
+      "\u042d\u041a"
+    ],
+    "DAY": [
+      "\u0411\u0430\u0441\u043a\u044b\u04bb\u044b\u0430\u043d\u043d\u044c\u0430",
+      "\u0411\u044d\u043d\u0438\u0434\u0438\u044d\u043b\u0438\u043d\u043d\u044c\u0438\u043a",
+      "\u041e\u043f\u0442\u0443\u043e\u0440\u0443\u043d\u043d\u044c\u0443\u043a",
+      "\u0421\u044d\u0440\u044d\u0434\u044d",
+      "\u0427\u044d\u043f\u043f\u0438\u044d\u0440",
+      "\u0411\u044d\u044d\u0442\u0438\u04a5\u0441\u044d",
+      "\u0421\u0443\u0431\u0443\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0431. \u044d. \u0438.",
+      "\u0431. \u044d"
+    ],
+    "ERAS": [
+      "\u0431. \u044d. \u0438.",
+      "\u0431. \u044d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0422\u043e\u0445\u0441\u0443\u043d\u043d\u044c\u0443",
+      "\u041e\u043b\u0443\u043d\u043d\u044c\u0443",
+      "\u041a\u0443\u043b\u0443\u043d \u0442\u0443\u0442\u0430\u0440",
+      "\u041c\u0443\u0443\u0441 \u0443\u0441\u0442\u0430\u0440",
+      "\u042b\u0430\u043c \u044b\u0439\u044b\u043d",
+      "\u0411\u044d\u0441 \u044b\u0439\u044b\u043d",
+      "\u041e\u0442 \u044b\u0439\u044b\u043d",
+      "\u0410\u0442\u044b\u0440\u0434\u044c\u044b\u0445 \u044b\u0439\u044b\u043d",
+      "\u0411\u0430\u043b\u0430\u0495\u0430\u043d \u044b\u0439\u044b\u043d",
+      "\u0410\u043b\u0442\u044b\u043d\u043d\u044c\u044b",
+      "\u0421\u044d\u0442\u0438\u043d\u043d\u044c\u0438",
+      "\u0410\u0445\u0441\u044b\u043d\u043d\u044c\u044b"
+    ],
+    "SHORTDAY": [
+      "\u0411\u0441",
+      "\u0411\u043d",
+      "\u041e\u043f",
+      "\u0421\u044d",
+      "\u0427\u043f",
+      "\u0411\u044d",
+      "\u0421\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0422\u043e\u0445\u0441",
+      "\u041e\u043b\u0443\u043d",
+      "\u041a\u043b\u043d_\u0442\u0442\u0440",
+      "\u041c\u0443\u0441_\u0443\u0441\u0442",
+      "\u042b\u0430\u043c_\u0439\u043d",
+      "\u0411\u044d\u0441_\u0439\u043d",
+      "\u041e\u0442_\u0439\u043d",
+      "\u0410\u0442\u0440\u0434\u044c_\u0439\u043d",
+      "\u0411\u043b\u0495\u043d_\u0439\u043d",
+      "\u0410\u043b\u0442",
+      "\u0421\u044d\u0442",
+      "\u0410\u0445\u0441"
+    ],
+    "STANDALONEMONTH": [
+      "\u0422\u043e\u0445\u0441\u0443\u043d\u043d\u044c\u0443",
+      "\u041e\u043b\u0443\u043d\u043d\u044c\u0443",
+      "\u041a\u0443\u043b\u0443\u043d \u0442\u0443\u0442\u0430\u0440",
+      "\u041c\u0443\u0443\u0441 \u0443\u0441\u0442\u0430\u0440",
+      "\u042b\u0430\u043c \u044b\u0439\u044b\u043d",
+      "\u0411\u044d\u0441 \u044b\u0439\u044b\u043d",
+      "\u041e\u0442 \u044b\u0439\u044b\u043d",
+      "\u0410\u0442\u044b\u0440\u0434\u044c\u044b\u0445 \u044b\u0439\u044b\u043d",
+      "\u0411\u0430\u043b\u0430\u0495\u0430\u043d \u044b\u0439\u044b\u043d",
+      "\u0410\u043b\u0442\u044b\u043d\u043d\u044c\u044b",
+      "\u0421\u044d\u0442\u0438\u043d\u043d\u044c\u0438",
+      "\u0410\u0445\u0441\u044b\u043d\u043d\u044c\u044b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y '\u0441\u044b\u043b' MMMM d '\u043a\u04af\u043d\u044d', EEEE",
+    "longDate": "y, MMMM d",
+    "medium": "y, MMM d HH:mm:ss",
+    "mediumDate": "y, MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/M/d HH:mm",
+    "shortDate": "yy/M/d",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u0440\u0443\u0431.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sah-ru",
+  "localeID": "sah_RU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah.js
new file mode 100644
index 0000000..8e57afc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sah.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u042d\u0418",
+      "\u042d\u041a"
+    ],
+    "DAY": [
+      "\u0411\u0430\u0441\u043a\u044b\u04bb\u044b\u0430\u043d\u043d\u044c\u0430",
+      "\u0411\u044d\u043d\u0438\u0434\u0438\u044d\u043b\u0438\u043d\u043d\u044c\u0438\u043a",
+      "\u041e\u043f\u0442\u0443\u043e\u0440\u0443\u043d\u043d\u044c\u0443\u043a",
+      "\u0421\u044d\u0440\u044d\u0434\u044d",
+      "\u0427\u044d\u043f\u043f\u0438\u044d\u0440",
+      "\u0411\u044d\u044d\u0442\u0438\u04a5\u0441\u044d",
+      "\u0421\u0443\u0431\u0443\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u0431. \u044d. \u0438.",
+      "\u0431. \u044d"
+    ],
+    "ERAS": [
+      "\u0431. \u044d. \u0438.",
+      "\u0431. \u044d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0422\u043e\u0445\u0441\u0443\u043d\u043d\u044c\u0443",
+      "\u041e\u043b\u0443\u043d\u043d\u044c\u0443",
+      "\u041a\u0443\u043b\u0443\u043d \u0442\u0443\u0442\u0430\u0440",
+      "\u041c\u0443\u0443\u0441 \u0443\u0441\u0442\u0430\u0440",
+      "\u042b\u0430\u043c \u044b\u0439\u044b\u043d",
+      "\u0411\u044d\u0441 \u044b\u0439\u044b\u043d",
+      "\u041e\u0442 \u044b\u0439\u044b\u043d",
+      "\u0410\u0442\u044b\u0440\u0434\u044c\u044b\u0445 \u044b\u0439\u044b\u043d",
+      "\u0411\u0430\u043b\u0430\u0495\u0430\u043d \u044b\u0439\u044b\u043d",
+      "\u0410\u043b\u0442\u044b\u043d\u043d\u044c\u044b",
+      "\u0421\u044d\u0442\u0438\u043d\u043d\u044c\u0438",
+      "\u0410\u0445\u0441\u044b\u043d\u043d\u044c\u044b"
+    ],
+    "SHORTDAY": [
+      "\u0411\u0441",
+      "\u0411\u043d",
+      "\u041e\u043f",
+      "\u0421\u044d",
+      "\u0427\u043f",
+      "\u0411\u044d",
+      "\u0421\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0422\u043e\u0445\u0441",
+      "\u041e\u043b\u0443\u043d",
+      "\u041a\u043b\u043d_\u0442\u0442\u0440",
+      "\u041c\u0443\u0441_\u0443\u0441\u0442",
+      "\u042b\u0430\u043c_\u0439\u043d",
+      "\u0411\u044d\u0441_\u0439\u043d",
+      "\u041e\u0442_\u0439\u043d",
+      "\u0410\u0442\u0440\u0434\u044c_\u0439\u043d",
+      "\u0411\u043b\u0495\u043d_\u0439\u043d",
+      "\u0410\u043b\u0442",
+      "\u0421\u044d\u0442",
+      "\u0410\u0445\u0441"
+    ],
+    "STANDALONEMONTH": [
+      "\u0422\u043e\u0445\u0441\u0443\u043d\u043d\u044c\u0443",
+      "\u041e\u043b\u0443\u043d\u043d\u044c\u0443",
+      "\u041a\u0443\u043b\u0443\u043d \u0442\u0443\u0442\u0430\u0440",
+      "\u041c\u0443\u0443\u0441 \u0443\u0441\u0442\u0430\u0440",
+      "\u042b\u0430\u043c \u044b\u0439\u044b\u043d",
+      "\u0411\u044d\u0441 \u044b\u0439\u044b\u043d",
+      "\u041e\u0442 \u044b\u0439\u044b\u043d",
+      "\u0410\u0442\u044b\u0440\u0434\u044c\u044b\u0445 \u044b\u0439\u044b\u043d",
+      "\u0411\u0430\u043b\u0430\u0495\u0430\u043d \u044b\u0439\u044b\u043d",
+      "\u0410\u043b\u0442\u044b\u043d\u043d\u044c\u044b",
+      "\u0421\u044d\u0442\u0438\u043d\u043d\u044c\u0438",
+      "\u0410\u0445\u0441\u044b\u043d\u043d\u044c\u044b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y '\u0441\u044b\u043b' MMMM d '\u043a\u04af\u043d\u044d', EEEE",
+    "longDate": "y, MMMM d",
+    "medium": "y, MMM d HH:mm:ss",
+    "mediumDate": "y, MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/M/d HH:mm",
+    "shortDate": "yy/M/d",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u0440\u0443\u0431.",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sah",
+  "localeID": "sah",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq-ke.js
new file mode 100644
index 0000000..c4fdb68
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Tesiran",
+      "Teipa"
+    ],
+    "DAY": [
+      "Mderot ee are",
+      "Mderot ee kuni",
+      "Mderot ee ong\u2019wan",
+      "Mderot ee inet",
+      "Mderot ee ile",
+      "Mderot ee sapa",
+      "Mderot ee kwe"
+    ],
+    "ERANAMES": [
+      "Kabla ya Christo",
+      "Baada ya Christo"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Lapa le obo",
+      "Lapa le waare",
+      "Lapa le okuni",
+      "Lapa le ong\u2019wan",
+      "Lapa le imet",
+      "Lapa le ile",
+      "Lapa le sapa",
+      "Lapa le isiet",
+      "Lapa le saal",
+      "Lapa le tomon",
+      "Lapa le tomon obo",
+      "Lapa le tomon waare"
+    ],
+    "SHORTDAY": [
+      "Are",
+      "Kun",
+      "Ong",
+      "Ine",
+      "Ile",
+      "Sap",
+      "Kwe"
+    ],
+    "SHORTMONTH": [
+      "Obo",
+      "Waa",
+      "Oku",
+      "Ong",
+      "Ime",
+      "Ile",
+      "Sap",
+      "Isi",
+      "Saa",
+      "Tom",
+      "Tob",
+      "Tow"
+    ],
+    "STANDALONEMONTH": [
+      "Lapa le obo",
+      "Lapa le waare",
+      "Lapa le okuni",
+      "Lapa le ong\u2019wan",
+      "Lapa le imet",
+      "Lapa le ile",
+      "Lapa le sapa",
+      "Lapa le isiet",
+      "Lapa le saal",
+      "Lapa le tomon",
+      "Lapa le tomon obo",
+      "Lapa le tomon waare"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "saq-ke",
+  "localeID": "saq_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq.js
new file mode 100644
index 0000000..3b91678
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_saq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Tesiran",
+      "Teipa"
+    ],
+    "DAY": [
+      "Mderot ee are",
+      "Mderot ee kuni",
+      "Mderot ee ong\u2019wan",
+      "Mderot ee inet",
+      "Mderot ee ile",
+      "Mderot ee sapa",
+      "Mderot ee kwe"
+    ],
+    "ERANAMES": [
+      "Kabla ya Christo",
+      "Baada ya Christo"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Lapa le obo",
+      "Lapa le waare",
+      "Lapa le okuni",
+      "Lapa le ong\u2019wan",
+      "Lapa le imet",
+      "Lapa le ile",
+      "Lapa le sapa",
+      "Lapa le isiet",
+      "Lapa le saal",
+      "Lapa le tomon",
+      "Lapa le tomon obo",
+      "Lapa le tomon waare"
+    ],
+    "SHORTDAY": [
+      "Are",
+      "Kun",
+      "Ong",
+      "Ine",
+      "Ile",
+      "Sap",
+      "Kwe"
+    ],
+    "SHORTMONTH": [
+      "Obo",
+      "Waa",
+      "Oku",
+      "Ong",
+      "Ime",
+      "Ile",
+      "Sap",
+      "Isi",
+      "Saa",
+      "Tom",
+      "Tob",
+      "Tow"
+    ],
+    "STANDALONEMONTH": [
+      "Lapa le obo",
+      "Lapa le waare",
+      "Lapa le okuni",
+      "Lapa le ong\u2019wan",
+      "Lapa le imet",
+      "Lapa le ile",
+      "Lapa le sapa",
+      "Lapa le isiet",
+      "Lapa le saal",
+      "Lapa le tomon",
+      "Lapa le tomon obo",
+      "Lapa le tomon waare"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "saq",
+  "localeID": "saq",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp-tz.js
new file mode 100644
index 0000000..b476af4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Lwamilawu",
+      "Pashamihe"
+    ],
+    "DAY": [
+      "Mulungu",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alahamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Ashanali uKilisito",
+      "Pamwandi ya Kilisto"
+    ],
+    "ERAS": [
+      "AK",
+      "PK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mupalangulwa",
+      "Mwitope",
+      "Mushende",
+      "Munyi",
+      "Mushende Magali",
+      "Mujimbi",
+      "Mushipepo",
+      "Mupuguto",
+      "Munyense",
+      "Mokhu",
+      "Musongandembwe",
+      "Muhaano"
+    ],
+    "SHORTDAY": [
+      "Mul",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Mup",
+      "Mwi",
+      "Msh",
+      "Mun",
+      "Mag",
+      "Muj",
+      "Msp",
+      "Mpg",
+      "Mye",
+      "Mok",
+      "Mus",
+      "Muh"
+    ],
+    "STANDALONEMONTH": [
+      "Mupalangulwa",
+      "Mwitope",
+      "Mushende",
+      "Munyi",
+      "Mushende Magali",
+      "Mujimbi",
+      "Mushipepo",
+      "Mupuguto",
+      "Munyense",
+      "Mokhu",
+      "Musongandembwe",
+      "Muhaano"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "sbp-tz",
+  "localeID": "sbp_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp.js
new file mode 100644
index 0000000..65a582b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sbp.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Lwamilawu",
+      "Pashamihe"
+    ],
+    "DAY": [
+      "Mulungu",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alahamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Ashanali uKilisito",
+      "Pamwandi ya Kilisto"
+    ],
+    "ERAS": [
+      "AK",
+      "PK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mupalangulwa",
+      "Mwitope",
+      "Mushende",
+      "Munyi",
+      "Mushende Magali",
+      "Mujimbi",
+      "Mushipepo",
+      "Mupuguto",
+      "Munyense",
+      "Mokhu",
+      "Musongandembwe",
+      "Muhaano"
+    ],
+    "SHORTDAY": [
+      "Mul",
+      "Jtt",
+      "Jnn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Mup",
+      "Mwi",
+      "Msh",
+      "Mun",
+      "Mag",
+      "Muj",
+      "Msp",
+      "Mpg",
+      "Mye",
+      "Mok",
+      "Mus",
+      "Muh"
+    ],
+    "STANDALONEMONTH": [
+      "Mupalangulwa",
+      "Mwitope",
+      "Mushende",
+      "Munyi",
+      "Mushende Magali",
+      "Mujimbi",
+      "Mushipepo",
+      "Mupuguto",
+      "Munyense",
+      "Mokhu",
+      "Musongandembwe",
+      "Muhaano"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "sbp",
+  "localeID": "sbp",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-fi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-fi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-fi.js
new file mode 100644
index 0000000..0d3b477
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-fi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "i\u0111itbeaivet",
+      "eahketbeaivet"
+    ],
+    "DAY": [
+      "aejlege",
+      "m\u00e5anta",
+      "d\u00e4jsta",
+      "gaskevahkoe",
+      "d\u00e5arsta",
+      "bearjadahke",
+      "laavadahke"
+    ],
+    "ERANAMES": [
+      "ovdal Kristtusa",
+      "ma\u014b\u014bel Kristtusa"
+    ],
+    "ERAS": [
+      "o.Kr.",
+      "m.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "SHORTDAY": [
+      "sotn",
+      "vuos",
+      "ma\u014b",
+      "gask",
+      "duor",
+      "bear",
+      "l\u00e1v"
+    ],
+    "SHORTMONTH": [
+      "o\u0111\u0111ajage",
+      "guovva",
+      "njuk\u010da",
+      "cuo\u014bo",
+      "miesse",
+      "geasse",
+      "suoidne",
+      "borge",
+      "\u010dak\u010da",
+      "golggot",
+      "sk\u00e1bma",
+      "juovla"
+    ],
+    "STANDALONEMONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "se-fi",
+  "localeID": "se_FI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-no.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-no.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-no.js
new file mode 100644
index 0000000..4fa6e3a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-no.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "i\u0111itbeaivet",
+      "eahketbeaivet"
+    ],
+    "DAY": [
+      "sotnabeaivi",
+      "vuoss\u00e1rga",
+      "ma\u014b\u014beb\u00e1rga",
+      "gaskavahkku",
+      "duorasdat",
+      "bearjadat",
+      "l\u00e1vvardat"
+    ],
+    "ERANAMES": [
+      "ovdal Kristtusa",
+      "ma\u014b\u014bel Kristtusa"
+    ],
+    "ERAS": [
+      "o.Kr.",
+      "m.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "SHORTDAY": [
+      "sotn",
+      "vuos",
+      "ma\u014b",
+      "gask",
+      "duor",
+      "bear",
+      "l\u00e1v"
+    ],
+    "SHORTMONTH": [
+      "o\u0111\u0111j",
+      "guov",
+      "njuk",
+      "cuo",
+      "mies",
+      "geas",
+      "suoi",
+      "borg",
+      "\u010dak\u010d",
+      "golg",
+      "sk\u00e1b",
+      "juov"
+    ],
+    "STANDALONEMONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "se-no",
+  "localeID": "se_NO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-se.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-se.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-se.js
new file mode 100644
index 0000000..ea4545e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se-se.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "i\u0111itbeaivet",
+      "eahketbeaivet"
+    ],
+    "DAY": [
+      "sotnabeaivi",
+      "vuoss\u00e1rga",
+      "ma\u014b\u014beb\u00e1rga",
+      "gaskavahkku",
+      "duorasdat",
+      "bearjadat",
+      "l\u00e1vvardat"
+    ],
+    "ERANAMES": [
+      "ovdal Kristtusa",
+      "ma\u014b\u014bel Kristtusa"
+    ],
+    "ERAS": [
+      "o.Kr.",
+      "m.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "SHORTDAY": [
+      "sotn",
+      "vuos",
+      "ma\u014b",
+      "gask",
+      "duor",
+      "bear",
+      "l\u00e1v"
+    ],
+    "SHORTMONTH": [
+      "o\u0111\u0111j",
+      "guov",
+      "njuk",
+      "cuo",
+      "mies",
+      "geas",
+      "suoi",
+      "borg",
+      "\u010dak\u010d",
+      "golg",
+      "sk\u00e1b",
+      "juov"
+    ],
+    "STANDALONEMONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "se-se",
+  "localeID": "se_SE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se.js
new file mode 100644
index 0000000..2434e7b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_se.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "i\u0111itbeaivet",
+      "eahketbeaivet"
+    ],
+    "DAY": [
+      "sotnabeaivi",
+      "vuoss\u00e1rga",
+      "ma\u014b\u014beb\u00e1rga",
+      "gaskavahkku",
+      "duorasdat",
+      "bearjadat",
+      "l\u00e1vvardat"
+    ],
+    "ERANAMES": [
+      "ovdal Kristtusa",
+      "ma\u014b\u014bel Kristtusa"
+    ],
+    "ERAS": [
+      "o.Kr.",
+      "m.Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "SHORTDAY": [
+      "sotn",
+      "vuos",
+      "ma\u014b",
+      "gask",
+      "duor",
+      "bear",
+      "l\u00e1v"
+    ],
+    "SHORTMONTH": [
+      "o\u0111\u0111j",
+      "guov",
+      "njuk",
+      "cuo",
+      "mies",
+      "geas",
+      "suoi",
+      "borg",
+      "\u010dak\u010d",
+      "golg",
+      "sk\u00e1b",
+      "juov"
+    ],
+    "STANDALONEMONTH": [
+      "o\u0111\u0111ajagem\u00e1nnu",
+      "guovvam\u00e1nnu",
+      "njuk\u010dam\u00e1nnu",
+      "cuo\u014bom\u00e1nnu",
+      "miessem\u00e1nnu",
+      "geassem\u00e1nnu",
+      "suoidnem\u00e1nnu",
+      "borgem\u00e1nnu",
+      "\u010dak\u010dam\u00e1nnu",
+      "golggotm\u00e1nnu",
+      "sk\u00e1bmam\u00e1nnu",
+      "juovlam\u00e1nnu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "se",
+  "localeID": "se",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh-mz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh-mz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh-mz.js
new file mode 100644
index 0000000..f9341d9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh-mz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Dimingu",
+      "Chiposi",
+      "Chipiri",
+      "Chitatu",
+      "Chinai",
+      "Chishanu",
+      "Sabudu"
+    ],
+    "ERANAMES": [
+      "Antes de Cristo",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "AC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janeiro",
+      "Fevreiro",
+      "Marco",
+      "Abril",
+      "Maio",
+      "Junho",
+      "Julho",
+      "Augusto",
+      "Setembro",
+      "Otubro",
+      "Novembro",
+      "Decembro"
+    ],
+    "SHORTDAY": [
+      "Dim",
+      "Pos",
+      "Pir",
+      "Tat",
+      "Nai",
+      "Sha",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fev",
+      "Mar",
+      "Abr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Set",
+      "Otu",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "Janeiro",
+      "Fevreiro",
+      "Marco",
+      "Abril",
+      "Maio",
+      "Junho",
+      "Julho",
+      "Augusto",
+      "Setembro",
+      "Otubro",
+      "Novembro",
+      "Decembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d 'de' MMM 'de' y HH:mm:ss",
+    "mediumDate": "d 'de' MMM 'de' y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MTn",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "seh-mz",
+  "localeID": "seh_MZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh.js
new file mode 100644
index 0000000..135b223
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_seh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Dimingu",
+      "Chiposi",
+      "Chipiri",
+      "Chitatu",
+      "Chinai",
+      "Chishanu",
+      "Sabudu"
+    ],
+    "ERANAMES": [
+      "Antes de Cristo",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "AC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janeiro",
+      "Fevreiro",
+      "Marco",
+      "Abril",
+      "Maio",
+      "Junho",
+      "Julho",
+      "Augusto",
+      "Setembro",
+      "Otubro",
+      "Novembro",
+      "Decembro"
+    ],
+    "SHORTDAY": [
+      "Dim",
+      "Pos",
+      "Pir",
+      "Tat",
+      "Nai",
+      "Sha",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fev",
+      "Mar",
+      "Abr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Set",
+      "Otu",
+      "Nov",
+      "Dec"
+    ],
+    "STANDALONEMONTH": [
+      "Janeiro",
+      "Fevreiro",
+      "Marco",
+      "Abril",
+      "Maio",
+      "Junho",
+      "Julho",
+      "Augusto",
+      "Setembro",
+      "Otubro",
+      "Novembro",
+      "Decembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d 'de' MMM 'de' y HH:mm:ss",
+    "mediumDate": "d 'de' MMM 'de' y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MTn",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "seh",
+  "localeID": "seh",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses-ml.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses-ml.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses-ml.js
new file mode 100644
index 0000000..071f8a4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses-ml.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Adduha",
+      "Aluula"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atinni",
+      "Atalaata",
+      "Alarba",
+      "Alhamiisa",
+      "Alzuma",
+      "Asibti"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa zamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alz",
+      "Asi"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "ses-ml",
+  "localeID": "ses_ML",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses.js
new file mode 100644
index 0000000..816e7d8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ses.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Adduha",
+      "Aluula"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atinni",
+      "Atalaata",
+      "Alarba",
+      "Alhamiisa",
+      "Alzuma",
+      "Asibti"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa zamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alz",
+      "Asi"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "ses",
+  "localeID": "ses",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg-cf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg-cf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg-cf.js
new file mode 100644
index 0000000..8cb4ce0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg-cf.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ND",
+      "LK"
+    ],
+    "DAY": [
+      "Bikua-\u00f4ko",
+      "B\u00efkua-\u00fbse",
+      "B\u00efkua-pt\u00e2",
+      "B\u00efkua-us\u00ef\u00f6",
+      "B\u00efkua-ok\u00fc",
+      "L\u00e2p\u00f4s\u00f6",
+      "L\u00e2yenga"
+    ],
+    "ERANAMES": [
+      "K\u00f4zo na Kr\u00eestu",
+      "Na pek\u00f4 t\u00ee Kr\u00eestu"
+    ],
+    "ERAS": [
+      "KnK",
+      "NpK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Nyenye",
+      "Fulund\u00efgi",
+      "Mb\u00e4ng\u00fc",
+      "Ngub\u00f9e",
+      "B\u00eal\u00e4w\u00fc",
+      "F\u00f6ndo",
+      "Lengua",
+      "K\u00fck\u00fcr\u00fc",
+      "Mvuka",
+      "Ngberere",
+      "Nab\u00e4nd\u00fcru",
+      "Kakauka"
+    ],
+    "SHORTDAY": [
+      "Bk1",
+      "Bk2",
+      "Bk3",
+      "Bk4",
+      "Bk5",
+      "L\u00e2p",
+      "L\u00e2y"
+    ],
+    "SHORTMONTH": [
+      "Nye",
+      "Ful",
+      "Mb\u00e4",
+      "Ngu",
+      "B\u00eal",
+      "F\u00f6n",
+      "Len",
+      "K\u00fck",
+      "Mvu",
+      "Ngb",
+      "Nab",
+      "Kak"
+    ],
+    "STANDALONEMONTH": [
+      "Nyenye",
+      "Fulund\u00efgi",
+      "Mb\u00e4ng\u00fc",
+      "Ngub\u00f9e",
+      "B\u00eal\u00e4w\u00fc",
+      "F\u00f6ndo",
+      "Lengua",
+      "K\u00fck\u00fcr\u00fc",
+      "Mvuka",
+      "Ngberere",
+      "Nab\u00e4nd\u00fcru",
+      "Kakauka"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sg-cf",
+  "localeID": "sg_CF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg.js
new file mode 100644
index 0000000..d4b9a50
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ND",
+      "LK"
+    ],
+    "DAY": [
+      "Bikua-\u00f4ko",
+      "B\u00efkua-\u00fbse",
+      "B\u00efkua-pt\u00e2",
+      "B\u00efkua-us\u00ef\u00f6",
+      "B\u00efkua-ok\u00fc",
+      "L\u00e2p\u00f4s\u00f6",
+      "L\u00e2yenga"
+    ],
+    "ERANAMES": [
+      "K\u00f4zo na Kr\u00eestu",
+      "Na pek\u00f4 t\u00ee Kr\u00eestu"
+    ],
+    "ERAS": [
+      "KnK",
+      "NpK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Nyenye",
+      "Fulund\u00efgi",
+      "Mb\u00e4ng\u00fc",
+      "Ngub\u00f9e",
+      "B\u00eal\u00e4w\u00fc",
+      "F\u00f6ndo",
+      "Lengua",
+      "K\u00fck\u00fcr\u00fc",
+      "Mvuka",
+      "Ngberere",
+      "Nab\u00e4nd\u00fcru",
+      "Kakauka"
+    ],
+    "SHORTDAY": [
+      "Bk1",
+      "Bk2",
+      "Bk3",
+      "Bk4",
+      "Bk5",
+      "L\u00e2p",
+      "L\u00e2y"
+    ],
+    "SHORTMONTH": [
+      "Nye",
+      "Ful",
+      "Mb\u00e4",
+      "Ngu",
+      "B\u00eal",
+      "F\u00f6n",
+      "Len",
+      "K\u00fck",
+      "Mvu",
+      "Ngb",
+      "Nab",
+      "Kak"
+    ],
+    "STANDALONEMONTH": [
+      "Nyenye",
+      "Fulund\u00efgi",
+      "Mb\u00e4ng\u00fc",
+      "Ngub\u00f9e",
+      "B\u00eal\u00e4w\u00fc",
+      "F\u00f6ndo",
+      "Lengua",
+      "K\u00fck\u00fcr\u00fc",
+      "Mvuka",
+      "Ngberere",
+      "Nab\u00e4nd\u00fcru",
+      "Kakauka"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sg",
+  "localeID": "sg",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn-ma.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn-ma.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn-ma.js
new file mode 100644
index 0000000..3156546
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn-ma.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "tifawt",
+      "tadgg\u02b7at"
+    ],
+    "DAY": [
+      "asamas",
+      "aynas",
+      "asinas",
+      "ak\u1e5bas",
+      "akwas",
+      "asimwas",
+      "asi\u1e0dyas"
+    ],
+    "ERANAMES": [
+      "dat n \u025bisa",
+      "dffir n \u025bisa"
+    ],
+    "ERAS": [
+      "da\u025b",
+      "df\u025b"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "innayr",
+      "b\u1e5bay\u1e5b",
+      "ma\u1e5b\u1e63",
+      "ibrir",
+      "mayyu",
+      "yunyu",
+      "yulyuz",
+      "\u0263uct",
+      "cutanbir",
+      "ktubr",
+      "nuwanbir",
+      "dujanbir"
+    ],
+    "SHORTDAY": [
+      "asa",
+      "ayn",
+      "asi",
+      "ak\u1e5b",
+      "akw",
+      "asim",
+      "asi\u1e0d"
+    ],
+    "SHORTMONTH": [
+      "inn",
+      "b\u1e5ba",
+      "ma\u1e5b",
+      "ibr",
+      "may",
+      "yun",
+      "yul",
+      "\u0263uc",
+      "cut",
+      "ktu",
+      "nuw",
+      "duj"
+    ],
+    "STANDALONEMONTH": [
+      "innayr",
+      "b\u1e5bay\u1e5b",
+      "ma\u1e5b\u1e63",
+      "ibrir",
+      "mayyu",
+      "yunyu",
+      "yulyuz",
+      "\u0263uct",
+      "cutanbir",
+      "ktubr",
+      "nuwanbir",
+      "dujanbir"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "shi-latn-ma",
+  "localeID": "shi_Latn_MA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn.js
new file mode 100644
index 0000000..d754079
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "tifawt",
+      "tadgg\u02b7at"
+    ],
+    "DAY": [
+      "asamas",
+      "aynas",
+      "asinas",
+      "ak\u1e5bas",
+      "akwas",
+      "asimwas",
+      "asi\u1e0dyas"
+    ],
+    "ERANAMES": [
+      "dat n \u025bisa",
+      "dffir n \u025bisa"
+    ],
+    "ERAS": [
+      "da\u025b",
+      "df\u025b"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "innayr",
+      "b\u1e5bay\u1e5b",
+      "ma\u1e5b\u1e63",
+      "ibrir",
+      "mayyu",
+      "yunyu",
+      "yulyuz",
+      "\u0263uct",
+      "cutanbir",
+      "ktubr",
+      "nuwanbir",
+      "dujanbir"
+    ],
+    "SHORTDAY": [
+      "asa",
+      "ayn",
+      "asi",
+      "ak\u1e5b",
+      "akw",
+      "asim",
+      "asi\u1e0d"
+    ],
+    "SHORTMONTH": [
+      "inn",
+      "b\u1e5ba",
+      "ma\u1e5b",
+      "ibr",
+      "may",
+      "yun",
+      "yul",
+      "\u0263uc",
+      "cut",
+      "ktu",
+      "nuw",
+      "duj"
+    ],
+    "STANDALONEMONTH": [
+      "innayr",
+      "b\u1e5bay\u1e5b",
+      "ma\u1e5b\u1e63",
+      "ibrir",
+      "mayyu",
+      "yunyu",
+      "yulyuz",
+      "\u0263uct",
+      "cutanbir",
+      "ktubr",
+      "nuwanbir",
+      "dujanbir"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "shi-latn",
+  "localeID": "shi_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng-ma.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng-ma.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng-ma.js
new file mode 100644
index 0000000..bcbd7c1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng-ma.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c",
+      "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c"
+    ],
+    "DAY": [
+      "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59",
+      "\u2d30\u2d62\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d55\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d61\u2d30\u2d59",
+      "\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59"
+    ],
+    "ERANAMES": [
+      "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30",
+      "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30"
+    ],
+    "ERAS": [
+      "\u2d37\u2d30\u2d44",
+      "\u2d37\u2d3c\u2d44"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "SHORTDAY": [
+      "\u2d30\u2d59\u2d30",
+      "\u2d30\u2d62\u2d4f",
+      "\u2d30\u2d59\u2d49",
+      "\u2d30\u2d3d\u2d55",
+      "\u2d30\u2d3d\u2d61",
+      "\u2d30\u2d59\u2d49\u2d4e",
+      "\u2d30\u2d59\u2d49\u2d39"
+    ],
+    "SHORTMONTH": [
+      "\u2d49\u2d4f\u2d4f",
+      "\u2d31\u2d55\u2d30",
+      "\u2d4e\u2d30\u2d55",
+      "\u2d49\u2d31\u2d54",
+      "\u2d4e\u2d30\u2d62",
+      "\u2d62\u2d53\u2d4f",
+      "\u2d62\u2d53\u2d4d",
+      "\u2d56\u2d53\u2d5b",
+      "\u2d5b\u2d53\u2d5c",
+      "\u2d3d\u2d5c\u2d53",
+      "\u2d4f\u2d53\u2d61",
+      "\u2d37\u2d53\u2d4a"
+    ],
+    "STANDALONEMONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "shi-tfng-ma",
+  "localeID": "shi_Tfng_MA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[17/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl-kz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl-kz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl-kz.js
new file mode 100644
index 0000000..20738da
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl-kz.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0442\u0430\u04a3\u0435\u0440\u0442\u0435\u04a3\u0433\u0456",
+      "\u0442\u04af\u0441\u0442\u0435\u043d \u043a\u0435\u0439\u0456\u043d\u0433\u0456"
+    ],
+    "DAY": [
+      "\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456",
+      "\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456",
+      "\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0436\u04b1\u043c\u0430",
+      "\u0441\u0435\u043d\u0431\u0456"
+    ],
+    "ERANAMES": [
+      "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437\u0493\u0430 \u0434\u0435\u0439\u0456\u043d",
+      "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437"
+    ],
+    "ERAS": [
+      "\u0431.\u0437.\u0434.",
+      "\u0431.\u0437."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u049b\u0430\u04a3\u0442\u0430\u0440",
+      "\u0430\u049b\u043f\u0430\u043d",
+      "\u043d\u0430\u0443\u0440\u044b\u0437",
+      "\u0441\u04d9\u0443\u0456\u0440",
+      "\u043c\u0430\u043c\u044b\u0440",
+      "\u043c\u0430\u0443\u0441\u044b\u043c",
+      "\u0448\u0456\u043b\u0434\u0435",
+      "\u0442\u0430\u043c\u044b\u0437",
+      "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a",
+      "\u049b\u0430\u0437\u0430\u043d",
+      "\u049b\u0430\u0440\u0430\u0448\u0430",
+      "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d"
+    ],
+    "SHORTDAY": [
+      "\u0436\u0435\u043a",
+      "\u0434\u04af\u0439",
+      "\u0441\u0435\u0439",
+      "\u0441\u04d9\u0440",
+      "\u0431\u0435\u0439",
+      "\u0436\u04b1\u043c\u0430",
+      "\u0441\u0435\u043d"
+    ],
+    "SHORTMONTH": [
+      "\u049b\u0430\u04a3.",
+      "\u0430\u049b\u043f.",
+      "\u043d\u0430\u0443.",
+      "\u0441\u04d9\u0443.",
+      "\u043c\u0430\u043c.",
+      "\u043c\u0430\u0443.",
+      "\u0448\u0456\u043b.",
+      "\u0442\u0430\u043c.",
+      "\u049b\u044b\u0440.",
+      "\u049b\u0430\u0437.",
+      "\u049b\u0430\u0440.",
+      "\u0436\u0435\u043b\u0442."
+    ],
+    "STANDALONEMONTH": [
+      "\u049b\u0430\u04a3\u0442\u0430\u0440",
+      "\u0430\u049b\u043f\u0430\u043d",
+      "\u043d\u0430\u0443\u0440\u044b\u0437",
+      "\u0441\u04d9\u0443\u0456\u0440",
+      "\u043c\u0430\u043c\u044b\u0440",
+      "\u043c\u0430\u0443\u0441\u044b\u043c",
+      "\u0448\u0456\u043b\u0434\u0435",
+      "\u0442\u0430\u043c\u044b\u0437",
+      "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a",
+      "\u049b\u0430\u0437\u0430\u043d",
+      "\u049b\u0430\u0440\u0430\u0448\u0430",
+      "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "y, dd-MMM HH:mm:ss",
+    "mediumDate": "y, dd-MMM",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b8",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "kk-cyrl-kz",
+  "localeID": "kk_Cyrl_KZ",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl.js
new file mode 100644
index 0000000..f716820
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk-cyrl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0442\u0430\u04a3\u0435\u0440\u0442\u0435\u04a3\u0433\u0456",
+      "\u0442\u04af\u0441\u0442\u0435\u043d \u043a\u0435\u0439\u0456\u043d\u0433\u0456"
+    ],
+    "DAY": [
+      "\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456",
+      "\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456",
+      "\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0436\u04b1\u043c\u0430",
+      "\u0441\u0435\u043d\u0431\u0456"
+    ],
+    "ERANAMES": [
+      "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437\u0493\u0430 \u0434\u0435\u0439\u0456\u043d",
+      "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437"
+    ],
+    "ERAS": [
+      "\u0431.\u0437.\u0434.",
+      "\u0431.\u0437."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u049b\u0430\u04a3\u0442\u0430\u0440",
+      "\u0430\u049b\u043f\u0430\u043d",
+      "\u043d\u0430\u0443\u0440\u044b\u0437",
+      "\u0441\u04d9\u0443\u0456\u0440",
+      "\u043c\u0430\u043c\u044b\u0440",
+      "\u043c\u0430\u0443\u0441\u044b\u043c",
+      "\u0448\u0456\u043b\u0434\u0435",
+      "\u0442\u0430\u043c\u044b\u0437",
+      "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a",
+      "\u049b\u0430\u0437\u0430\u043d",
+      "\u049b\u0430\u0440\u0430\u0448\u0430",
+      "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d"
+    ],
+    "SHORTDAY": [
+      "\u0436\u0435\u043a",
+      "\u0434\u04af\u0439",
+      "\u0441\u0435\u0439",
+      "\u0441\u04d9\u0440",
+      "\u0431\u0435\u0439",
+      "\u0436\u04b1\u043c\u0430",
+      "\u0441\u0435\u043d"
+    ],
+    "SHORTMONTH": [
+      "\u049b\u0430\u04a3.",
+      "\u0430\u049b\u043f.",
+      "\u043d\u0430\u0443.",
+      "\u0441\u04d9\u0443.",
+      "\u043c\u0430\u043c.",
+      "\u043c\u0430\u0443.",
+      "\u0448\u0456\u043b.",
+      "\u0442\u0430\u043c.",
+      "\u049b\u044b\u0440.",
+      "\u049b\u0430\u0437.",
+      "\u049b\u0430\u0440.",
+      "\u0436\u0435\u043b\u0442."
+    ],
+    "STANDALONEMONTH": [
+      "\u049b\u0430\u04a3\u0442\u0430\u0440",
+      "\u0430\u049b\u043f\u0430\u043d",
+      "\u043d\u0430\u0443\u0440\u044b\u0437",
+      "\u0441\u04d9\u0443\u0456\u0440",
+      "\u043c\u0430\u043c\u044b\u0440",
+      "\u043c\u0430\u0443\u0441\u044b\u043c",
+      "\u0448\u0456\u043b\u0434\u0435",
+      "\u0442\u0430\u043c\u044b\u0437",
+      "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a",
+      "\u049b\u0430\u0437\u0430\u043d",
+      "\u049b\u0430\u0440\u0430\u0448\u0430",
+      "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "y, dd-MMM HH:mm:ss",
+    "mediumDate": "y, dd-MMM",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b8",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "kk-cyrl",
+  "localeID": "kk_Cyrl",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk.js
new file mode 100644
index 0000000..976d500
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0442\u0430\u04a3\u0435\u0440\u0442\u0435\u04a3\u0433\u0456",
+      "\u0442\u04af\u0441\u0442\u0435\u043d \u043a\u0435\u0439\u0456\u043d\u0433\u0456"
+    ],
+    "DAY": [
+      "\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456",
+      "\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456",
+      "\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456",
+      "\u0436\u04b1\u043c\u0430",
+      "\u0441\u0435\u043d\u0431\u0456"
+    ],
+    "ERANAMES": [
+      "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437\u0493\u0430 \u0434\u0435\u0439\u0456\u043d",
+      "\u0411\u0456\u0437\u0434\u0456\u04a3 \u0437\u0430\u043c\u0430\u043d\u044b\u043c\u044b\u0437"
+    ],
+    "ERAS": [
+      "\u0431.\u0437.\u0434.",
+      "\u0431.\u0437."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u049b\u0430\u04a3\u0442\u0430\u0440",
+      "\u0430\u049b\u043f\u0430\u043d",
+      "\u043d\u0430\u0443\u0440\u044b\u0437",
+      "\u0441\u04d9\u0443\u0456\u0440",
+      "\u043c\u0430\u043c\u044b\u0440",
+      "\u043c\u0430\u0443\u0441\u044b\u043c",
+      "\u0448\u0456\u043b\u0434\u0435",
+      "\u0442\u0430\u043c\u044b\u0437",
+      "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a",
+      "\u049b\u0430\u0437\u0430\u043d",
+      "\u049b\u0430\u0440\u0430\u0448\u0430",
+      "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d"
+    ],
+    "SHORTDAY": [
+      "\u0436\u0435\u043a",
+      "\u0434\u04af\u0439",
+      "\u0441\u0435\u0439",
+      "\u0441\u04d9\u0440",
+      "\u0431\u0435\u0439",
+      "\u0436\u04b1\u043c\u0430",
+      "\u0441\u0435\u043d"
+    ],
+    "SHORTMONTH": [
+      "\u049b\u0430\u04a3.",
+      "\u0430\u049b\u043f.",
+      "\u043d\u0430\u0443.",
+      "\u0441\u04d9\u0443.",
+      "\u043c\u0430\u043c.",
+      "\u043c\u0430\u0443.",
+      "\u0448\u0456\u043b.",
+      "\u0442\u0430\u043c.",
+      "\u049b\u044b\u0440.",
+      "\u049b\u0430\u0437.",
+      "\u049b\u0430\u0440.",
+      "\u0436\u0435\u043b\u0442."
+    ],
+    "STANDALONEMONTH": [
+      "\u049b\u0430\u04a3\u0442\u0430\u0440",
+      "\u0430\u049b\u043f\u0430\u043d",
+      "\u043d\u0430\u0443\u0440\u044b\u0437",
+      "\u0441\u04d9\u0443\u0456\u0440",
+      "\u043c\u0430\u043c\u044b\u0440",
+      "\u043c\u0430\u0443\u0441\u044b\u043c",
+      "\u0448\u0456\u043b\u0434\u0435",
+      "\u0442\u0430\u043c\u044b\u0437",
+      "\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a",
+      "\u049b\u0430\u0437\u0430\u043d",
+      "\u049b\u0430\u0440\u0430\u0448\u0430",
+      "\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "y, dd-MMM HH:mm:ss",
+    "mediumDate": "y, dd-MMM",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b8",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "kk",
+  "localeID": "kk",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj-cm.js
new file mode 100644
index 0000000..9247110
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "s\u0254ndi",
+      "lundi",
+      "mardi",
+      "m\u025brk\u025br\u025bdi",
+      "yedi",
+      "va\u014bd\u025br\u025bdi",
+      "m\u0254n\u0254 s\u0254ndi"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "pamba",
+      "wanja",
+      "mbiy\u0254 m\u025bndo\u014bg\u0254",
+      "Ny\u0254l\u0254mb\u0254\u014bg\u0254",
+      "M\u0254n\u0254 \u014bgbanja",
+      "Nya\u014bgw\u025b \u014bgbanja",
+      "ku\u014bgw\u025b",
+      "f\u025b",
+      "njapi",
+      "nyukul",
+      "11",
+      "\u0253ul\u0253us\u025b"
+    ],
+    "SHORTDAY": [
+      "s\u0254ndi",
+      "lundi",
+      "mardi",
+      "m\u025brk\u025br\u025bdi",
+      "yedi",
+      "va\u014bd\u025br\u025bdi",
+      "m\u0254n\u0254 s\u0254ndi"
+    ],
+    "SHORTMONTH": [
+      "pamba",
+      "wanja",
+      "mbiy\u0254 m\u025bndo\u014bg\u0254",
+      "Ny\u0254l\u0254mb\u0254\u014bg\u0254",
+      "M\u0254n\u0254 \u014bgbanja",
+      "Nya\u014bgw\u025b \u014bgbanja",
+      "ku\u014bgw\u025b",
+      "f\u025b",
+      "njapi",
+      "nyukul",
+      "11",
+      "\u0253ul\u0253us\u025b"
+    ],
+    "STANDALONEMONTH": [
+      "pamba",
+      "wanja",
+      "mbiy\u0254 m\u025bndo\u014bg\u0254",
+      "Ny\u0254l\u0254mb\u0254\u014bg\u0254",
+      "M\u0254n\u0254 \u014bgbanja",
+      "Nya\u014bgw\u025b \u014bgbanja",
+      "ku\u014bgw\u025b",
+      "f\u025b",
+      "njapi",
+      "nyukul",
+      "11",
+      "\u0253ul\u0253us\u025b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM y HH:mm",
+    "shortDate": "dd/MM y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kkj-cm",
+  "localeID": "kkj_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj.js
new file mode 100644
index 0000000..247c7aa
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kkj.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "s\u0254ndi",
+      "lundi",
+      "mardi",
+      "m\u025brk\u025br\u025bdi",
+      "yedi",
+      "va\u014bd\u025br\u025bdi",
+      "m\u0254n\u0254 s\u0254ndi"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "pamba",
+      "wanja",
+      "mbiy\u0254 m\u025bndo\u014bg\u0254",
+      "Ny\u0254l\u0254mb\u0254\u014bg\u0254",
+      "M\u0254n\u0254 \u014bgbanja",
+      "Nya\u014bgw\u025b \u014bgbanja",
+      "ku\u014bgw\u025b",
+      "f\u025b",
+      "njapi",
+      "nyukul",
+      "11",
+      "\u0253ul\u0253us\u025b"
+    ],
+    "SHORTDAY": [
+      "s\u0254ndi",
+      "lundi",
+      "mardi",
+      "m\u025brk\u025br\u025bdi",
+      "yedi",
+      "va\u014bd\u025br\u025bdi",
+      "m\u0254n\u0254 s\u0254ndi"
+    ],
+    "SHORTMONTH": [
+      "pamba",
+      "wanja",
+      "mbiy\u0254 m\u025bndo\u014bg\u0254",
+      "Ny\u0254l\u0254mb\u0254\u014bg\u0254",
+      "M\u0254n\u0254 \u014bgbanja",
+      "Nya\u014bgw\u025b \u014bgbanja",
+      "ku\u014bgw\u025b",
+      "f\u025b",
+      "njapi",
+      "nyukul",
+      "11",
+      "\u0253ul\u0253us\u025b"
+    ],
+    "STANDALONEMONTH": [
+      "pamba",
+      "wanja",
+      "mbiy\u0254 m\u025bndo\u014bg\u0254",
+      "Ny\u0254l\u0254mb\u0254\u014bg\u0254",
+      "M\u0254n\u0254 \u014bgbanja",
+      "Nya\u014bgw\u025b \u014bgbanja",
+      "ku\u014bgw\u025b",
+      "f\u025b",
+      "njapi",
+      "nyukul",
+      "11",
+      "\u0253ul\u0253us\u025b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM y HH:mm",
+    "shortDate": "dd/MM y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kkj",
+  "localeID": "kkj",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl-gl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl-gl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl-gl.js
new file mode 100644
index 0000000..bf1c87e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl-gl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ulloqeqqata-tungaa",
+      "ulloqeqqata-kingorna"
+    ],
+    "DAY": [
+      "sabaat",
+      "ataasinngorneq",
+      "marlunngorneq",
+      "pingasunngorneq",
+      "sisamanngorneq",
+      "tallimanngorneq",
+      "arfininngorneq"
+    ],
+    "ERANAMES": [
+      "Kristusip inunngornerata siornagut",
+      "Kristusip inunngornerata kingornagut"
+    ],
+    "ERAS": [
+      "Kr.in.si.",
+      "Kr.in.king."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "martsi",
+      "aprili",
+      "maji",
+      "juni",
+      "juli",
+      "augustusi",
+      "septemberi",
+      "oktoberi",
+      "novemberi",
+      "decemberi"
+    ],
+    "SHORTDAY": [
+      "sab",
+      "ata",
+      "mar",
+      "pin",
+      "sis",
+      "tal",
+      "arf"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januari",
+      "februari",
+      "martsi",
+      "aprili",
+      "maji",
+      "juni",
+      "juli",
+      "augustusi",
+      "septemberi",
+      "oktoberi",
+      "novemberi",
+      "decemberi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "MMM dd, y h:mm:ss a",
+    "mediumDate": "MMM dd, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "y-MM-dd h:mm a",
+    "shortDate": "y-MM-dd",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kl-gl",
+  "localeID": "kl_GL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl.js
new file mode 100644
index 0000000..96d1285
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ulloqeqqata-tungaa",
+      "ulloqeqqata-kingorna"
+    ],
+    "DAY": [
+      "sabaat",
+      "ataasinngorneq",
+      "marlunngorneq",
+      "pingasunngorneq",
+      "sisamanngorneq",
+      "tallimanngorneq",
+      "arfininngorneq"
+    ],
+    "ERANAMES": [
+      "Kristusip inunngornerata siornagut",
+      "Kristusip inunngornerata kingornagut"
+    ],
+    "ERAS": [
+      "Kr.in.si.",
+      "Kr.in.king."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januari",
+      "februari",
+      "martsi",
+      "aprili",
+      "maji",
+      "juni",
+      "juli",
+      "augustusi",
+      "septemberi",
+      "oktoberi",
+      "novemberi",
+      "decemberi"
+    ],
+    "SHORTDAY": [
+      "sab",
+      "ata",
+      "mar",
+      "pin",
+      "sis",
+      "tal",
+      "arf"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januari",
+      "februari",
+      "martsi",
+      "aprili",
+      "maji",
+      "juni",
+      "juli",
+      "augustusi",
+      "septemberi",
+      "oktoberi",
+      "novemberi",
+      "decemberi"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "MMM dd, y h:mm:ss a",
+    "mediumDate": "MMM dd, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "y-MM-dd h:mm a",
+    "shortDate": "y-MM-dd",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "kr",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kl",
+  "localeID": "kl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln-ke.js
new file mode 100644
index 0000000..69f6179
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "karoon",
+      "kooskoliny"
+    ],
+    "DAY": [
+      "Kotisap",
+      "Kotaai",
+      "Koaeng\u2019",
+      "Kosomok",
+      "Koang\u2019wan",
+      "Komuut",
+      "Kolo"
+    ],
+    "ERANAMES": [
+      "Amait kesich Jesu",
+      "Kokakesich Jesu"
+    ],
+    "ERAS": [
+      "AM",
+      "KO"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mulgul",
+      "Ng\u2019atyaato",
+      "Kiptaamo",
+      "Iwootkuut",
+      "Mamuut",
+      "Paagi",
+      "Ng\u2019eiyeet",
+      "Rooptui",
+      "Bureet",
+      "Epeeso",
+      "Kipsuunde ne taai",
+      "Kipsuunde nebo aeng\u2019"
+    ],
+    "SHORTDAY": [
+      "Kts",
+      "Kot",
+      "Koo",
+      "Kos",
+      "Koa",
+      "Kom",
+      "Kol"
+    ],
+    "SHORTMONTH": [
+      "Mul",
+      "Ngat",
+      "Taa",
+      "Iwo",
+      "Mam",
+      "Paa",
+      "Nge",
+      "Roo",
+      "Bur",
+      "Epe",
+      "Kpt",
+      "Kpa"
+    ],
+    "STANDALONEMONTH": [
+      "Mulgul",
+      "Ng\u2019atyaato",
+      "Kiptaamo",
+      "Iwootkuut",
+      "Mamuut",
+      "Paagi",
+      "Ng\u2019eiyeet",
+      "Rooptui",
+      "Bureet",
+      "Epeeso",
+      "Kipsuunde ne taai",
+      "Kipsuunde nebo aeng\u2019"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kln-ke",
+  "localeID": "kln_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln.js
new file mode 100644
index 0000000..5362331
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kln.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "karoon",
+      "kooskoliny"
+    ],
+    "DAY": [
+      "Kotisap",
+      "Kotaai",
+      "Koaeng\u2019",
+      "Kosomok",
+      "Koang\u2019wan",
+      "Komuut",
+      "Kolo"
+    ],
+    "ERANAMES": [
+      "Amait kesich Jesu",
+      "Kokakesich Jesu"
+    ],
+    "ERAS": [
+      "AM",
+      "KO"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Mulgul",
+      "Ng\u2019atyaato",
+      "Kiptaamo",
+      "Iwootkuut",
+      "Mamuut",
+      "Paagi",
+      "Ng\u2019eiyeet",
+      "Rooptui",
+      "Bureet",
+      "Epeeso",
+      "Kipsuunde ne taai",
+      "Kipsuunde nebo aeng\u2019"
+    ],
+    "SHORTDAY": [
+      "Kts",
+      "Kot",
+      "Koo",
+      "Kos",
+      "Koa",
+      "Kom",
+      "Kol"
+    ],
+    "SHORTMONTH": [
+      "Mul",
+      "Ngat",
+      "Taa",
+      "Iwo",
+      "Mam",
+      "Paa",
+      "Nge",
+      "Roo",
+      "Bur",
+      "Epe",
+      "Kpt",
+      "Kpa"
+    ],
+    "STANDALONEMONTH": [
+      "Mulgul",
+      "Ng\u2019atyaato",
+      "Kiptaamo",
+      "Iwootkuut",
+      "Mamuut",
+      "Paagi",
+      "Ng\u2019eiyeet",
+      "Rooptui",
+      "Bureet",
+      "Epeeso",
+      "Kipsuunde ne taai",
+      "Kipsuunde nebo aeng\u2019"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kln",
+  "localeID": "kln",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km-kh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km-kh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km-kh.js
new file mode 100644
index 0000000..185486b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km-kh.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1796\u17d2\u179a\u17b9\u1780",
+      "\u179b\u17d2\u1784\u17b6\u1785"
+    ],
+    "DAY": [
+      "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799",
+      "\u1785\u1793\u17d2\u1791",
+      "\u17a2\u1784\u17d2\u1782\u17b6\u179a",
+      "\u1796\u17bb\u1792",
+      "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd",
+      "\u179f\u17bb\u1780\u17d2\u179a",
+      "\u179f\u17c5\u179a\u17cd"
+    ],
+    "ERANAMES": [
+      "\u1798\u17bb\u1793\u200b\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787",
+      "\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787"
+    ],
+    "ERAS": [
+      "\u1798\u17bb\u1793 \u1782.\u179f.",
+      "\u1782.\u179f."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u1798\u1780\u179a\u17b6",
+      "\u1780\u17bb\u1798\u17d2\u1797\u17c8",
+      "\u1798\u17b8\u1793\u17b6",
+      "\u1798\u17c1\u179f\u17b6",
+      "\u17a7\u179f\u1797\u17b6",
+      "\u1798\u17b7\u1790\u17bb\u1793\u17b6",
+      "\u1780\u1780\u17d2\u1780\u178a\u17b6",
+      "\u179f\u17b8\u17a0\u17b6",
+      "\u1780\u1789\u17d2\u1789\u17b6",
+      "\u178f\u17bb\u179b\u17b6",
+      "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6",
+      "\u1792\u17d2\u1793\u17bc"
+    ],
+    "SHORTDAY": [
+      "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799",
+      "\u1785\u1793\u17d2\u1791",
+      "\u17a2\u1784\u17d2\u1782\u17b6\u179a",
+      "\u1796\u17bb\u1792",
+      "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd",
+      "\u179f\u17bb\u1780\u17d2\u179a",
+      "\u179f\u17c5\u179a\u17cd"
+    ],
+    "SHORTMONTH": [
+      "\u1798\u1780\u179a\u17b6",
+      "\u1780\u17bb\u1798\u17d2\u1797\u17c8",
+      "\u1798\u17b8\u1793\u17b6",
+      "\u1798\u17c1\u179f\u17b6",
+      "\u17a7\u179f\u1797\u17b6",
+      "\u1798\u17b7\u1790\u17bb\u1793\u17b6",
+      "\u1780\u1780\u17d2\u1780\u178a\u17b6",
+      "\u179f\u17b8\u17a0\u17b6",
+      "\u1780\u1789\u17d2\u1789\u17b6",
+      "\u178f\u17bb\u179b\u17b6",
+      "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6",
+      "\u1792\u17d2\u1793\u17bc"
+    ],
+    "STANDALONEMONTH": [
+      "\u1798\u1780\u179a\u17b6",
+      "\u1780\u17bb\u1798\u17d2\u1797\u17c8",
+      "\u1798\u17b8\u1793\u17b6",
+      "\u1798\u17c1\u179f\u17b6",
+      "\u17a7\u179f\u1797\u17b6",
+      "\u1798\u17b7\u1790\u17bb\u1793\u17b6",
+      "\u1780\u1780\u17d2\u1780\u178a\u17b6",
+      "\u179f\u17b8\u17a0\u17b6",
+      "\u1780\u1789\u17d2\u1789\u17b6",
+      "\u178f\u17bb\u179b\u17b6",
+      "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6",
+      "\u1792\u17d2\u1793\u17bc"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Riel",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "km-kh",
+  "localeID": "km_KH",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km.js
new file mode 100644
index 0000000..4291454
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_km.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1796\u17d2\u179a\u17b9\u1780",
+      "\u179b\u17d2\u1784\u17b6\u1785"
+    ],
+    "DAY": [
+      "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799",
+      "\u1785\u1793\u17d2\u1791",
+      "\u17a2\u1784\u17d2\u1782\u17b6\u179a",
+      "\u1796\u17bb\u1792",
+      "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd",
+      "\u179f\u17bb\u1780\u17d2\u179a",
+      "\u179f\u17c5\u179a\u17cd"
+    ],
+    "ERANAMES": [
+      "\u1798\u17bb\u1793\u200b\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787",
+      "\u1782\u17d2\u179a\u17b7\u179f\u17d2\u178f\u179f\u1780\u179a\u17b6\u1787"
+    ],
+    "ERAS": [
+      "\u1798\u17bb\u1793 \u1782.\u179f.",
+      "\u1782.\u179f."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u1798\u1780\u179a\u17b6",
+      "\u1780\u17bb\u1798\u17d2\u1797\u17c8",
+      "\u1798\u17b8\u1793\u17b6",
+      "\u1798\u17c1\u179f\u17b6",
+      "\u17a7\u179f\u1797\u17b6",
+      "\u1798\u17b7\u1790\u17bb\u1793\u17b6",
+      "\u1780\u1780\u17d2\u1780\u178a\u17b6",
+      "\u179f\u17b8\u17a0\u17b6",
+      "\u1780\u1789\u17d2\u1789\u17b6",
+      "\u178f\u17bb\u179b\u17b6",
+      "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6",
+      "\u1792\u17d2\u1793\u17bc"
+    ],
+    "SHORTDAY": [
+      "\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799",
+      "\u1785\u1793\u17d2\u1791",
+      "\u17a2\u1784\u17d2\u1782\u17b6\u179a",
+      "\u1796\u17bb\u1792",
+      "\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd",
+      "\u179f\u17bb\u1780\u17d2\u179a",
+      "\u179f\u17c5\u179a\u17cd"
+    ],
+    "SHORTMONTH": [
+      "\u1798\u1780\u179a\u17b6",
+      "\u1780\u17bb\u1798\u17d2\u1797\u17c8",
+      "\u1798\u17b8\u1793\u17b6",
+      "\u1798\u17c1\u179f\u17b6",
+      "\u17a7\u179f\u1797\u17b6",
+      "\u1798\u17b7\u1790\u17bb\u1793\u17b6",
+      "\u1780\u1780\u17d2\u1780\u178a\u17b6",
+      "\u179f\u17b8\u17a0\u17b6",
+      "\u1780\u1789\u17d2\u1789\u17b6",
+      "\u178f\u17bb\u179b\u17b6",
+      "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6",
+      "\u1792\u17d2\u1793\u17bc"
+    ],
+    "STANDALONEMONTH": [
+      "\u1798\u1780\u179a\u17b6",
+      "\u1780\u17bb\u1798\u17d2\u1797\u17c8",
+      "\u1798\u17b8\u1793\u17b6",
+      "\u1798\u17c1\u179f\u17b6",
+      "\u17a7\u179f\u1797\u17b6",
+      "\u1798\u17b7\u1790\u17bb\u1793\u17b6",
+      "\u1780\u1780\u17d2\u1780\u178a\u17b6",
+      "\u179f\u17b8\u17a0\u17b6",
+      "\u1780\u1789\u17d2\u1789\u17b6",
+      "\u178f\u17bb\u179b\u17b6",
+      "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6",
+      "\u1792\u17d2\u1793\u17bc"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Riel",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "km",
+  "localeID": "km",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn-in.js
new file mode 100644
index 0000000..372dd63
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0caa\u0cc2\u0cb0\u0ccd\u0cb5\u0cbe\u0cb9\u0ccd\u0ca8",
+      "\u0c85\u0caa\u0cb0\u0cbe\u0cb9\u0ccd\u0ca8"
+    ],
+    "DAY": [
+      "\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0",
+      "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0",
+      "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0",
+      "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0",
+      "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0",
+      "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0",
+      "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"
+    ],
+    "ERANAMES": [
+      "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0caa\u0cc2\u0cb0\u0ccd\u0cb5",
+      "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0cb6\u0c95"
+    ],
+    "ERAS": [
+      "\u0c95\u0ccd\u0cb0\u0cbf.\u0caa\u0cc2",
+      "\u0c95\u0ccd\u0cb0\u0cbf.\u0cb6"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf",
+      "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf",
+      "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+      "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+      "\u0cae\u0cc7",
+      "\u0c9c\u0cc2\u0ca8\u0ccd",
+      "\u0c9c\u0cc1\u0cb2\u0cc8",
+      "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+      "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+      "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+    ],
+    "SHORTDAY": [
+      "\u0cad\u0cbe\u0ca8\u0cc1",
+      "\u0cb8\u0ccb\u0cae",
+      "\u0cae\u0c82\u0c97\u0cb3",
+      "\u0cac\u0cc1\u0ca7",
+      "\u0c97\u0cc1\u0cb0\u0cc1",
+      "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0",
+      "\u0cb6\u0ca8\u0cbf"
+    ],
+    "SHORTMONTH": [
+      "\u0c9c\u0ca8",
+      "\u0cab\u0cc6\u0cac\u0ccd\u0cb0",
+      "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+      "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf",
+      "\u0cae\u0cc7",
+      "\u0c9c\u0cc2\u0ca8\u0ccd",
+      "\u0c9c\u0cc1\u0cb2\u0cc8",
+      "\u0c86\u0c97",
+      "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82",
+      "\u0c85\u0c95\u0ccd\u0c9f\u0ccb",
+      "\u0ca8\u0cb5\u0cc6\u0c82",
+      "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82"
+    ],
+    "STANDALONEMONTH": [
+      "\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf",
+      "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf",
+      "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+      "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+      "\u0cae\u0cc7",
+      "\u0c9c\u0cc2\u0ca8\u0ccd",
+      "\u0c9c\u0cc1\u0cb2\u0cc8",
+      "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+      "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+      "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y hh:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "hh:mm:ss a",
+    "short": "M/d/yy hh:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kn-in",
+  "localeID": "kn_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn.js
new file mode 100644
index 0000000..2667956
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kn.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0caa\u0cc2\u0cb0\u0ccd\u0cb5\u0cbe\u0cb9\u0ccd\u0ca8",
+      "\u0c85\u0caa\u0cb0\u0cbe\u0cb9\u0ccd\u0ca8"
+    ],
+    "DAY": [
+      "\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0",
+      "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0",
+      "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0",
+      "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0",
+      "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0",
+      "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0",
+      "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"
+    ],
+    "ERANAMES": [
+      "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0caa\u0cc2\u0cb0\u0ccd\u0cb5",
+      "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0cb6\u0c95"
+    ],
+    "ERAS": [
+      "\u0c95\u0ccd\u0cb0\u0cbf.\u0caa\u0cc2",
+      "\u0c95\u0ccd\u0cb0\u0cbf.\u0cb6"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf",
+      "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf",
+      "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+      "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+      "\u0cae\u0cc7",
+      "\u0c9c\u0cc2\u0ca8\u0ccd",
+      "\u0c9c\u0cc1\u0cb2\u0cc8",
+      "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+      "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+      "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+    ],
+    "SHORTDAY": [
+      "\u0cad\u0cbe\u0ca8\u0cc1",
+      "\u0cb8\u0ccb\u0cae",
+      "\u0cae\u0c82\u0c97\u0cb3",
+      "\u0cac\u0cc1\u0ca7",
+      "\u0c97\u0cc1\u0cb0\u0cc1",
+      "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0",
+      "\u0cb6\u0ca8\u0cbf"
+    ],
+    "SHORTMONTH": [
+      "\u0c9c\u0ca8",
+      "\u0cab\u0cc6\u0cac\u0ccd\u0cb0",
+      "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+      "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf",
+      "\u0cae\u0cc7",
+      "\u0c9c\u0cc2\u0ca8\u0ccd",
+      "\u0c9c\u0cc1\u0cb2\u0cc8",
+      "\u0c86\u0c97",
+      "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82",
+      "\u0c85\u0c95\u0ccd\u0c9f\u0ccb",
+      "\u0ca8\u0cb5\u0cc6\u0c82",
+      "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82"
+    ],
+    "STANDALONEMONTH": [
+      "\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf",
+      "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf",
+      "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+      "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+      "\u0cae\u0cc7",
+      "\u0c9c\u0cc2\u0ca8\u0ccd",
+      "\u0c9c\u0cc1\u0cb2\u0cc8",
+      "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+      "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+      "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+      "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y hh:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "hh:mm:ss a",
+    "short": "M/d/yy hh:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kn",
+  "localeID": "kn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kp.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kp.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kp.js
new file mode 100644
index 0000000..2763f7b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kp.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\uc624\uc804",
+      "\uc624\ud6c4"
+    ],
+    "DAY": [
+      "\uc77c\uc694\uc77c",
+      "\uc6d4\uc694\uc77c",
+      "\ud654\uc694\uc77c",
+      "\uc218\uc694\uc77c",
+      "\ubaa9\uc694\uc77c",
+      "\uae08\uc694\uc77c",
+      "\ud1a0\uc694\uc77c"
+    ],
+    "ERANAMES": [
+      "\uae30\uc6d0\uc804",
+      "\uc11c\uae30"
+    ],
+    "ERAS": [
+      "\uae30\uc6d0\uc804",
+      "\uc11c\uae30"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "SHORTDAY": [
+      "\uc77c",
+      "\uc6d4",
+      "\ud654",
+      "\uc218",
+      "\ubaa9",
+      "\uae08",
+      "\ud1a0"
+    ],
+    "SHORTMONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "STANDALONEMONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE",
+    "longDate": "y\ub144 M\uc6d4 d\uc77c",
+    "medium": "y. M. d. a h:mm:ss",
+    "mediumDate": "y. M. d.",
+    "mediumTime": "a h:mm:ss",
+    "short": "yy. M. d. a h:mm",
+    "shortDate": "yy. M. d.",
+    "shortTime": "a h:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a9KP",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ko-kp",
+  "localeID": "ko_KP",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kr.js
new file mode 100644
index 0000000..016c523
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko-kr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\uc624\uc804",
+      "\uc624\ud6c4"
+    ],
+    "DAY": [
+      "\uc77c\uc694\uc77c",
+      "\uc6d4\uc694\uc77c",
+      "\ud654\uc694\uc77c",
+      "\uc218\uc694\uc77c",
+      "\ubaa9\uc694\uc77c",
+      "\uae08\uc694\uc77c",
+      "\ud1a0\uc694\uc77c"
+    ],
+    "ERANAMES": [
+      "\uae30\uc6d0\uc804",
+      "\uc11c\uae30"
+    ],
+    "ERAS": [
+      "\uae30\uc6d0\uc804",
+      "\uc11c\uae30"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "SHORTDAY": [
+      "\uc77c",
+      "\uc6d4",
+      "\ud654",
+      "\uc218",
+      "\ubaa9",
+      "\uae08",
+      "\ud1a0"
+    ],
+    "SHORTMONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "STANDALONEMONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE",
+    "longDate": "y\ub144 M\uc6d4 d\uc77c",
+    "medium": "y. M. d. a h:mm:ss",
+    "mediumDate": "y. M. d.",
+    "mediumTime": "a h:mm:ss",
+    "short": "yy. M. d. a h:mm",
+    "shortDate": "yy. M. d.",
+    "shortTime": "a h:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ko-kr",
+  "localeID": "ko_KR",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko.js
new file mode 100644
index 0000000..d3ff9ee
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ko.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\uc624\uc804",
+      "\uc624\ud6c4"
+    ],
+    "DAY": [
+      "\uc77c\uc694\uc77c",
+      "\uc6d4\uc694\uc77c",
+      "\ud654\uc694\uc77c",
+      "\uc218\uc694\uc77c",
+      "\ubaa9\uc694\uc77c",
+      "\uae08\uc694\uc77c",
+      "\ud1a0\uc694\uc77c"
+    ],
+    "ERANAMES": [
+      "\uae30\uc6d0\uc804",
+      "\uc11c\uae30"
+    ],
+    "ERAS": [
+      "\uae30\uc6d0\uc804",
+      "\uc11c\uae30"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "SHORTDAY": [
+      "\uc77c",
+      "\uc6d4",
+      "\ud654",
+      "\uc218",
+      "\ubaa9",
+      "\uae08",
+      "\ud1a0"
+    ],
+    "SHORTMONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "STANDALONEMONTH": [
+      "1\uc6d4",
+      "2\uc6d4",
+      "3\uc6d4",
+      "4\uc6d4",
+      "5\uc6d4",
+      "6\uc6d4",
+      "7\uc6d4",
+      "8\uc6d4",
+      "9\uc6d4",
+      "10\uc6d4",
+      "11\uc6d4",
+      "12\uc6d4"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE",
+    "longDate": "y\ub144 M\uc6d4 d\uc77c",
+    "medium": "y. M. d. a h:mm:ss",
+    "mediumDate": "y. M. d.",
+    "mediumTime": "a h:mm:ss",
+    "short": "yy. M. d. a h:mm",
+    "shortDate": "yy. M. d.",
+    "shortTime": "a h:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ko",
+  "localeID": "ko",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok-in.js
new file mode 100644
index 0000000..abfcd60
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok-in.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092e.\u092a\u0942.",
+      "\u092e.\u0928\u0902."
+    ],
+    "DAY": [
+      "\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930",
+      "\u0938\u094b\u092e\u0935\u093e\u0930",
+      "\u092e\u0902\u0917\u0933\u093e\u0930",
+      "\u092c\u0941\u0927\u0935\u093e\u0930",
+      "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+      "\u0936\u0928\u093f\u0935\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935",
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e"
+    ],
+    "ERAS": [
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935",
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0913\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0913\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u0935\u093f",
+      "\u0938\u094b\u092e",
+      "\u092e\u0902\u0917\u0933",
+      "\u092c\u0941\u0927",
+      "\u0917\u0941\u0930\u0941",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0913\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0913\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0913\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0913\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd-MM-y h:mm:ss a",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kok-in",
+  "localeID": "kok_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok.js
new file mode 100644
index 0000000..4a59d03
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kok.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092e.\u092a\u0942.",
+      "\u092e.\u0928\u0902."
+    ],
+    "DAY": [
+      "\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930",
+      "\u0938\u094b\u092e\u0935\u093e\u0930",
+      "\u092e\u0902\u0917\u0933\u093e\u0930",
+      "\u092c\u0941\u0927\u0935\u093e\u0930",
+      "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+      "\u0936\u0928\u093f\u0935\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935",
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e"
+    ],
+    "ERAS": [
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935",
+      "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0913\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0913\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u0935\u093f",
+      "\u0938\u094b\u092e",
+      "\u092e\u0902\u0917\u0933",
+      "\u092c\u0941\u0927",
+      "\u0917\u0941\u0930\u0941",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0913\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0913\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u090f\u092a\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0948",
+      "\u0913\u0917\u0938\u094d\u091f",
+      "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+      "\u0913\u0915\u094d\u091f\u094b\u092c\u0930",
+      "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+      "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd-MM-y h:mm:ss a",
+    "mediumDate": "dd-MM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kok",
+  "localeID": "kok",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab-in.js
new file mode 100644
index 0000000..0ab04e6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab-in.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0627\u064e\u062a\u06be\u0648\u0627\u0631",
+      "\u0698\u0654\u0646\u065b\u062f\u0631\u0655\u0631\u0648\u0627\u0631",
+      "\u0628\u0648\u065a\u0645\u0648\u0627\u0631",
+      "\u0628\u0648\u062f\u0648\u0627\u0631",
+      "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631",
+      "\u062c\u064f\u0645\u06c1",
+      "\u0628\u0679\u0648\u0627\u0631"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0655\u0644 \u0645\u0633\u06cc\u0656\u062d",
+      "\u0639\u06cc\u0656\u0633\u0648\u06cc \u0633\u0646\u06c1\u0655"
+    ],
+    "ERAS": [
+      "\u0628\u06cc \u0633\u06cc",
+      "\u0627\u06d2 \u0688\u06cc"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0622\u062a\u06be\u0648\u0627\u0631",
+      "\u0698\u0654\u0646\u065b\u062f\u0655\u0631\u0648\u0627\u0631",
+      "\u0628\u0648\u065a\u0645\u0648\u0627\u0631",
+      "\u0628\u0648\u062f\u0648\u0627\u0631",
+      "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631",
+      "\u062c\u064f\u0645\u06c1",
+      "\u0628\u0679\u0648\u0627\u0631"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ks-arab-in",
+  "localeID": "ks_Arab_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab.js
new file mode 100644
index 0000000..b1d807b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks-arab.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0627\u064e\u062a\u06be\u0648\u0627\u0631",
+      "\u0698\u0654\u0646\u065b\u062f\u0631\u0655\u0631\u0648\u0627\u0631",
+      "\u0628\u0648\u065a\u0645\u0648\u0627\u0631",
+      "\u0628\u0648\u062f\u0648\u0627\u0631",
+      "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631",
+      "\u062c\u064f\u0645\u06c1",
+      "\u0628\u0679\u0648\u0627\u0631"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0655\u0644 \u0645\u0633\u06cc\u0656\u062d",
+      "\u0639\u06cc\u0656\u0633\u0648\u06cc \u0633\u0646\u06c1\u0655"
+    ],
+    "ERAS": [
+      "\u0628\u06cc \u0633\u06cc",
+      "\u0627\u06d2 \u0688\u06cc"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0622\u062a\u06be\u0648\u0627\u0631",
+      "\u0698\u0654\u0646\u065b\u062f\u0655\u0631\u0648\u0627\u0631",
+      "\u0628\u0648\u065a\u0645\u0648\u0627\u0631",
+      "\u0628\u0648\u062f\u0648\u0627\u0631",
+      "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631",
+      "\u062c\u064f\u0645\u06c1",
+      "\u0628\u0679\u0648\u0627\u0631"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ks-arab",
+  "localeID": "ks_Arab",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[37/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js
new file mode 100644
index 0000000..dcb1a13
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.min.js
@@ -0,0 +1,307 @@
+/*
+ AngularJS v1.5.0
+ (c) 2010-2016 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(O,W,v){'use strict';function H(a){return function(){var b=arguments[0],d;d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.5.0/"+(a?a+"/":"")+b;for(b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var c=encodeURIComponent,e;e=arguments[b];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;d+=c(e)}return Error(d)}}function Ca(a){if(null==a||Za(a))return!1;if(L(a)||F(a)||C&&a instanceof C)return!0;
+var b="length"in Object(a)&&a.length;return N(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"==typeof a.item)}function n(a,b,d){var c,e;if(a)if(D(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(L(a)||Ca(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==n)a.forEach(b,d,a);else if(qc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&
+b.call(d,a[c],c,a);else for(c in a)sa.call(a,c)&&b.call(d,a[c],c,a);return a}function rc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function sc(a){return function(b,d){a(d,b)}}function Yd(){return++pb}function Qb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(E(g)||D(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],r=g[m];d&&E(r)?V(r)?a[m]=new Date(r.valueOf()):$a(r)?a[m]=new RegExp(r):r.nodeName?a[m]=r.cloneNode(!0):
+Rb(r)?a[m]=r.clone():(E(a[m])||(a[m]=L(r)?[]:{}),Qb(a[m],[r],!0)):a[m]=r}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function T(a){return Qb(a,wa.call(arguments,1),!1)}function Zd(a){return Qb(a,wa.call(arguments,1),!0)}function ca(a){return parseInt(a,10)}function Sb(a,b){return T(Object.create(a),b)}function B(){}function ab(a){return a}function ba(a){return function(){return a}}function tc(a){return D(a.toString)&&a.toString!==ga}function x(a){return"undefined"===typeof a}function y(a){return"undefined"!==
+typeof a}function E(a){return null!==a&&"object"===typeof a}function qc(a){return null!==a&&"object"===typeof a&&!uc(a)}function F(a){return"string"===typeof a}function N(a){return"number"===typeof a}function V(a){return"[object Date]"===ga.call(a)}function D(a){return"function"===typeof a}function $a(a){return"[object RegExp]"===ga.call(a)}function Za(a){return a&&a.window===a}function bb(a){return a&&a.$evalAsync&&a.$watch}function Na(a){return"boolean"===typeof a}function $d(a){return a&&N(a.length)&&
+ae.test(ga.call(a))}function Rb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function be(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function ra(a){return G(a.nodeName||a[0]&&a[0].nodeName)}function cb(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function Oa(a,b){function d(a,b){var d=b.$$hashKey,e;if(L(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(qc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&
+(b[e]=c(a[e]));else for(e in a)sa.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!E(a))return a;var b=f.indexOf(a);if(-1!==b)return g[b];if(Za(a)||bb(a))throw Da("cpws");var b=!1,c=e(a);c===v&&(c=L(a)?[]:Object.create(uc(a)),b=!0);f.push(a);g.push(c);return b?d(a,c):c}function e(a){switch(ga.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(c(a.buffer));
+case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex,b}if(D(a.cloneNode))return a.cloneNode(!0)}var f=[],g=[];if(b){if($d(b)||"[object ArrayBuffer]"===ga.call(b))throw Da("cpta");
+if(a===b)throw Da("cpi");L(b)?b.length=0:n(b,function(a,c){"$$hashKey"!==c&&delete b[c]});f.push(a);g.push(b);return d(a,b)}return c(a)}function na(a,b){if(L(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(E(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function oa(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d==typeof b&&"object"==d)if(L(a)){if(!L(b))return!1;if((d=a.length)==b.length){for(c=
+0;c<d;c++)if(!oa(a[c],b[c]))return!1;return!0}}else{if(V(a))return V(b)?oa(a.getTime(),b.getTime()):!1;if($a(a))return $a(b)?a.toString()==b.toString():!1;if(bb(a)||bb(b)||Za(a)||Za(b)||L(b)||V(b)||$a(b))return!1;d=Z();for(c in a)if("$"!==c.charAt(0)&&!D(a[c])){if(!oa(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&y(b[c])&&!D(b[c]))return!1;return!0}return!1}function db(a,b,d){return a.concat(wa.call(b,d))}function vc(a,b){var d=2<arguments.length?wa.call(arguments,2):[];
+return!D(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,db(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function ce(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=v:Za(b)?d="$WINDOW":b&&W===b?d="$DOCUMENT":bb(b)&&(d="$SCOPE");return d}function eb(a,b){if(x(a))return v;N(b)||(b=b?2:null);return JSON.stringify(a,ce,b)}function wc(a){return F(a)?JSON.parse(a):a}function xc(a,b){a=a.replace(de,
+"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return isNaN(d)?b:d}function Tb(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=xc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function ta(a){a=C(a).clone();try{a.empty()}catch(b){}var d=C("<div>").append(a).html();try{return a[0].nodeType===Pa?G(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+G(b)})}catch(c){return G(d)}}function yc(a){try{return decodeURIComponent(a)}catch(b){}}function zc(a){var b=
+{};n((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=yc(e),y(e)&&(f=y(f)?yc(f):!0,sa.call(b,e)?L(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Ub(a){var b=[];n(a,function(a,c){L(a)?n(a,function(a){b.push(ha(c,!0)+(!0===a?"":"="+ha(a,!0)))}):b.push(ha(c,!0)+(!0===a?"":"="+ha(a,!0)))});return b.length?b.join("&"):""}function qb(a){return ha(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,
+"+")}function ha(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ee(a,b){var d,c,e=Qa.length;for(c=0;c<e;++c)if(d=Qa[c]+b,F(d=a.getAttribute(d)))return d;return null}function fe(a,b){var d,c,e={};n(Qa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});n(Qa,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&
+(d=e,c=e.getAttribute(b))});d&&(e.strictDi=null!==ee(d,"strict-di"),b(d,c?[c]:[],e))}function Ac(a,b,d){E(d)||(d={});d=T({strictDi:!1},d);var c=function(){a=C(a);if(a.injector()){var c=a[0]===W?"document":ta(a);throw Da("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=fb(b,d.strictDi);c.invoke(["$rootScope","$rootElement",
+"$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;O&&e.test(O.name)&&(d.debugInfoEnabled=!0,O.name=O.name.replace(e,""));if(O&&!f.test(O.name))return c();O.name=O.name.replace(f,"");ia.resumeBootstrap=function(a){n(a,function(a){b.push(a)});return c()};D(ia.resumeDeferredBootstrap)&&ia.resumeDeferredBootstrap()}function ge(){O.name="NG_ENABLE_DEBUG_INFO!"+O.name;O.location.reload()}function he(a){a=
+ia.element(a).injector();if(!a)throw Da("test");return a.get("$$testability")}function Bc(a,b){b=b||"_";return a.replace(ie,function(a,c){return(c?b:"")+a.toLowerCase()})}function je(){var a;if(!Cc){var b=rb();(ua=x(b)?O.jQuery:b?O[b]:v)&&ua.fn.on?(C=ua,T(ua.fn,{scope:Ra.scope,isolateScope:Ra.isolateScope,controller:Ra.controller,injector:Ra.injector,inheritedData:Ra.inheritedData}),a=ua.cleanData,ua.cleanData=function(b){for(var c,e=0,f;null!=(f=b[e]);e++)(c=ua._data(f,"events"))&&c.$destroy&&ua(f).triggerHandler("$destroy");
+a(b)}):C=U;ia.element=C;Cc=!0}}function sb(a,b,d){if(!a)throw Da("areq",b||"?",d||"required");return a}function Sa(a,b,d){d&&L(a)&&(a=a[a.length-1]);sb(D(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ta(a,b){if("hasOwnProperty"===a)throw Da("badname",b);}function Dc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&D(a)?vc(e,a):a}function tb(a){for(var b=a[0],d=a[a.length-1],c,
+e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=C(wa.call(a,0,e))),c.push(b);return c||a}function Z(){return Object.create(null)}function ke(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=H("$injector"),c=H("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||H;return b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,d,e,f){f||(f=c);return function(){f[e||"push"]([b,
+d,arguments]);return K}}function b(a,d){return function(b,e){e&&D(e)&&(e.$$moduleName=f);c.push([a,d,arguments]);return K}}if(!g)throw d("nomod",f);var c=[],e=[],s=[],I=a("$injector","invoke","push",e),K={_invokeQueue:c,_configBlocks:e,_runBlocks:s,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider",
+"register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:I,run:function(a){s.push(a);return this}};h&&I(h);return K})}})}function le(a){T(a,{bootstrap:Ac,copy:Oa,extend:T,merge:Zd,equals:oa,element:C,forEach:n,injector:fb,noop:B,bind:vc,toJson:eb,fromJson:wc,identity:ab,isUndefined:x,isDefined:y,isString:F,isFunction:D,isObject:E,isNumber:N,isElement:Rb,isArray:L,
+version:me,isDate:V,lowercase:G,uppercase:ub,callbacks:{counter:0},getTestability:he,$$minErr:H,$$csp:Ea,reloadWithDebugInfo:ge});Vb=ke(O);Vb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:ne});a.provider("$compile",Ec).directive({a:oe,input:Fc,textarea:Fc,form:pe,script:qe,select:re,style:se,option:te,ngBind:ue,ngBindHtml:ve,ngBindTemplate:we,ngClass:xe,ngClassEven:ye,ngClassOdd:ze,ngCloak:Ae,ngController:Be,ngForm:Ce,ngHide:De,ngIf:Ee,ngInclude:Fe,ngInit:Ge,ngNonBindable:He,
+ngPluralize:Ie,ngRepeat:Je,ngShow:Ke,ngStyle:Le,ngSwitch:Me,ngSwitchWhen:Ne,ngSwitchDefault:Oe,ngOptions:Pe,ngTransclude:Qe,ngModel:Re,ngList:Se,ngChange:Te,pattern:Gc,ngPattern:Gc,required:Hc,ngRequired:Hc,minlength:Ic,ngMinlength:Ic,maxlength:Jc,ngMaxlength:Jc,ngValue:Ue,ngModelOptions:Ve}).directive({ngInclude:We}).directive(vb).directive(Kc);a.provider({$anchorScroll:Xe,$animate:Ye,$animateCss:Ze,$$animateJs:$e,$$animateQueue:af,$$AnimateRunner:bf,$$animateAsyncRun:cf,$browser:df,$cacheFactory:ef,
+$controller:ff,$document:gf,$exceptionHandler:hf,$filter:Lc,$$forceReflow:jf,$interpolate:kf,$interval:lf,$http:mf,$httpParamSerializer:nf,$httpParamSerializerJQLike:of,$httpBackend:pf,$xhrFactory:qf,$location:rf,$log:sf,$parse:tf,$rootScope:uf,$q:vf,$$q:wf,$sce:xf,$sceDelegate:yf,$sniffer:zf,$templateCache:Af,$templateRequest:Bf,$$testability:Cf,$timeout:Df,$window:Ef,$$rAF:Ff,$$jqLite:Gf,$$HashMap:Hf,$$cookieReader:If})}])}function gb(a){return a.replace(Jf,function(a,d,c,e){return e?c.toUpperCase():
+c}).replace(Kf,"Moz$1")}function Mc(a){a=a.nodeType;return 1===a||!a||9===a}function Nc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Wb.test(a)){d=d||e.appendChild(b.createElement("div"));c=(Lf.exec(a)||["",""])[1].toLowerCase();c=da[c]||da._default;d.innerHTML=c[1]+a.replace(Mf,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=db(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";n(f,function(a){e.appendChild(a)});return e}function Oc(a,
+b){var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)}function U(a){if(a instanceof U)return a;var b;F(a)&&(a=X(a),b=!0);if(!(this instanceof U)){if(b&&"<"!=a.charAt(0))throw Xb("nosel");return new U(a)}if(b){b=W;var d;a=(d=Nf.exec(a))?[b.createElement(d[1])]:(d=Nc(a,b))?d.childNodes:[]}Pc(this,a)}function Yb(a){return a.cloneNode(!0)}function wb(a,b){b||hb(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)hb(d[c])}function Qc(a,b,d,c){if(y(c))throw Xb("offargs");
+var e=(c=xb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];y(d)&&cb(c||[],d);y(d)&&c&&0<c.length||(a.removeEventListener(b,f,!1),delete e[b])};n(b.split(" "),function(a){g(a);yb[a]&&g(yb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function hb(a,b){var d=a.ng339,c=d&&ib[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Qc(a)),delete ib[d],a.ng339=v))}function xb(a,b){var d=a.ng339,d=d&&ib[d];b&&!d&&(a.ng339=d=++Of,
+d=ib[d]={events:{},data:{},handle:v});return d}function Zb(a,b,d){if(Mc(a)){var c=y(d),e=!c&&b&&!E(b),f=!b;a=(a=xb(a,!e))&&a.data;if(c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];T(a,b)}}}function zb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Ab(a,b){b&&a.setAttribute&&n(b.split(" "),function(b){a.setAttribute("class",X((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+X(b)+" "," ")))})}function Bb(a,
+b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");n(b.split(" "),function(a){a=X(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",X(d))}}function Pc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Rc(a,b){return Cb(a,"$"+(b||"ngController")+"Controller")}function Cb(a,b,d){9==a.nodeType&&(a=a.documentElement);for(b=
+L(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(y(d=C.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Sc(a){for(wb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function $b(a,b){b||wb(a);var d=a.parentNode;d&&d.removeChild(a)}function Pf(a,b){b=b||O;if("complete"===b.document.readyState)b.setTimeout(a);else C(b).on("load",a)}function Tc(a,b){var d=Db[b.toLowerCase()];return d&&Uc[ra(a)]&&d}function Qf(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};
+var f=b[d||c.type],g=f?f.length:0;if(g){if(x(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||Rf;1<g&&(f=na(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};d.elem=a;return d}function Rf(a,b,d){d.call(a,b)}function Sf(a,b,
+d){var c=b.relatedTarget;c&&(c===a||Tf.call(a,c))||d.call(a,b)}function Gf(){this.$get=function(){return T(U,{hasClass:function(a,b){a.attr&&(a=a[0]);return zb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Bb(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return Ab(a,b)}})}}function Fa(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||Yd)():d+":"+a}function Ua(a,b){if(b){var d=0;this.nextUid=
+function(){return++d}}n(a,this.put,this)}function Vc(a){a=a.toString().replace(Uf,"");return a.match(Vf)||a.match(Wf)}function Xf(a){return(a=Vc(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function fb(a,b){function d(a){return function(b,c){if(E(b))n(b,sc(a));else return a(b,c)}}function c(a,b){Ta(a,"service");if(D(b)||L(b))b=s.instantiate(b);if(!b.$get)throw Ga("pget",a);return r[a+"Provider"]=b}function e(a,b){return function(){var c=t.invoke(b,this);if(x(c))throw Ga("undef",a);
+return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){sb(x(a)||L(a),"modulesToLoad","not an array");var b=[],c;n(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=s.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{F(a)?(c=Vb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):D(a)?b.push(s.invoke(a)):L(a)?b.push(s.invoke(a)):Sa(a,"module")}catch(e){throw L(a)&&(a=a[a.length-1]),e.message&&e.stack&&
+-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ga("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ga("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=fb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!==typeof l)throw Ga("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:
+d(l,f))}return g}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);L(a)&&(a=a[a.length-1]);d=11>=xa?!1:"function"===typeof a&&/^(?:class\s|constructor\()/.test(Function.prototype.toString.call(a));return d?(c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=L(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,a))},get:d,annotate:fb.$$annotate,has:function(b){return r.hasOwnProperty(b+
+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Ua([],!0),r={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,ba(b),!1)}),constant:d(function(a,b){Ta(a,"constant");r[a]=b;I[a]=b}),decorator:function(a,b){var c=s.get(a+"Provider"),d=c.$get;c.$get=function(){var a=t.invoke(d,c);return t.invoke(b,null,{$delegate:a})}}}},s=r.$injector=h(r,function(a,b){ia.isString(b)&&l.push(b);
+throw Ga("unpr",l.join(" <- "));}),I={},K=h(I,function(a,b){var c=s.get(a+"Provider",b);return t.invoke(c.$get,c,v,a)}),t=K;r.$injectorProvider={$get:ba(K)};var p=g(a),t=K.get("$injector");t.strictDi=b;n(p,function(a){a&&t.invoke(a)});return t}function Xe(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ra(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();
+var c;c=g.yOffset;D(c)?c=c():Rb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):N(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=F(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||Pf(function(){c.$evalAsync(g)})});return g}]}function jb(a,b){if(!a&&!b)return"";
+if(!a)return b;if(!b)return a;L(a)&&(a=a.join(" "));L(b)&&(b=b.join(" "));return a+" "+b}function Yf(a){F(a)&&(a=a.split(" "));var b=Z();n(a,function(a){a.length&&(b[a]=!0)});return b}function Ha(a){return E(a)?a:{}}function Zf(a,b,d,c){function e(a){try{a.apply(null,wa.call(arguments,1))}finally{if(K--,0===K)for(;t.length;)try{t.pop()()}catch(b){d.error(b)}}}function f(){z=null;g();h()}function g(){a:{try{p=m.state;break a}catch(a){}p=void 0}p=x(p)?null:p;oa(p,$)&&(p=$);$=p}function h(){if(u!==k.url()||
+w!==p)u=k.url(),w=p,n(A,function(a){a(k.url(),p)})}var k=this,l=a.location,m=a.history,r=a.setTimeout,s=a.clearTimeout,I={};k.isMock=!1;var K=0,t=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){K++};k.notifyWhenNoOutstandingRequests=function(a){0===K?a():t.push(a)};var p,w,u=l.href,la=b.find("base"),z=null;g();w=p;k.url=function(b,d,e){x(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=w===e;if(u===b&&(!c.history||f))return k;var h=
+u&&Ia(u)===Ia(b);u=b;w=e;if(!c.history||h&&f){if(!h||z)z=b;d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b;l.href!==b&&(z=b)}else m[d?"replaceState":"pushState"](e,"",b),g(),w=p;return k}return z||l.href.replace(/%27/g,"'")};k.state=function(){return p};var A=[],Q=!1,$=null;k.onUrlChange=function(b){if(!Q){if(c.history)C(a).on("popstate",f);C(a).on("hashchange",f);Q=!0}A.push(b);return b};k.$$applicationDestroyed=function(){C(a).off("hashchange popstate",f)};k.$$checkUrlChange=
+h;k.baseHref=function(){var a=la.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};k.defer=function(a,b){var c;K++;c=r(function(){delete I[c];e(a)},b||0);I[c]=!0;return c};k.defer.cancel=function(a){return I[a]?(delete I[a],s(a),e(B),!0):!1}}function df(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new Zf(a,c,b,d)}]}function ef(){this.$get=function(){function a(a,c){function e(a){a!=r&&(s?s==a&&(s=a.n):s=a,f(a.n,a.p),f(a,r),r=a,r.n=null)}function f(a,
+b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw H("$cacheFactory")("iid",a);var g=0,h=T({},c,{id:a}),k=Z(),l=c&&c.capacity||Number.MAX_VALUE,m=Z(),r=null,s=null;return b[a]={put:function(a,b){if(!x(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in k||g++;k[a]=b;g>l&&this.remove(s.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==r&&(r=b.p);b==s&&(s=b.n);f(b.n,b.p);delete m[a]}a in
+k&&(delete k[a],g--)},removeAll:function(){k=Z();g=0;m=Z();r=s=null},destroy:function(){m=h=k=null;delete b[a]},info:function(){return T({},h,{size:g})}}}var b={};a.info=function(){var a={};n(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function Af(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Ec(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*(\w*)\s*$/,e={};n(a,function(a,f){var g=a.match(d);if(!g)throw ja("iscp",b,f,a,c?
+"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f}});return e}function c(a){var b=a.charAt(0);if(!b||b!==G(b))throw ja("baddir",a);if(a!==a.trim())throw ja("baddir",a);}var e={},f=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,g=/(([\w\-]+)(?:\:([^;]+))?;?)/,h=be("ngSrc,ngSrcset,src,srcset"),k=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function s(b,f){Ta(b,"directive");F(b)?(c(b),sb(f,"directiveFactory"),
+e.hasOwnProperty(b)||(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var f=[];n(e[b],function(e,g){try{var h=a.invoke(e);D(h)?h={compile:ba(h)}:!h.compile&&h.link&&(h.compile=ba(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";var k=h,l=h,m=h.name,s={isolateScope:null,bindToController:null};E(l.scope)&&(!0===l.bindToController?(s.bindToController=d(l.scope,m,!0),s.isolateScope={}):s.isolateScope=
+d(l.scope,m,!1));E(l.bindToController)&&(s.bindToController=d(l.bindToController,m,!0));if(E(s.bindToController)){var P=l.controller,S=l.controllerAs;if(!P)throw ja("noctrl",m);if(!Wc(P,S))throw ja("noident",m);}var ma=k.$$bindings=s;E(ma.isolateScope)&&(h.$$isolateBindings=ma.isolateScope);h.$$moduleName=e.$$moduleName;f.push(h)}catch(K){c(K)}});return f}])),e[b].push(f)):n(b,sc(s));return this};this.component=function(a,b){function c(a){function e(b){return D(b)||L(b)?function(c,d){return a.invoke(b,
+this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"";return{controller:d,controllerAs:Wc(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require}}var d=b.controller||function(){};n(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a)});c.$inject=["$injector"];return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return y(a)?(b.aHrefSanitizationWhitelist(a),
+this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return y(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var m=!0;this.debugInfoEnabled=function(a){return y(a)?(m=a,this):m};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,d,p,w,u,la,z,A){function Q(a,b,c){ba.innerHTML="<span "+b+">";b=ba.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);
+d.value=c;a.attributes.setNamedItem(d)}function $(a,b){try{a.addClass(b)}catch(c){}}function M(a,b,c,d,e){a instanceof C||(a=C(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===Pa&&k.nodeValue.match(f)&&Oc(k,a[g]=W.createElement("span"))}var l=P(a,b,a,c,d,e);M.$$addScopeClass(a);var m=null;return function(b,c,d){sb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;d=d.futureParentElement;f&&f.$$boundTransclude&&
+(f=f.$$boundTransclude);m||(m=(d=d&&d[0])?"foreignobject"!==ra(d)&&ga.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==m?C(U(m,C("<div>").append(a).html())):c?Ra.clone.call(a):a;if(g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);M.$$addScopeInfo(d,b);c&&c(d,b);l&&l(b,d,d,f);return d}}function P(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,p,s,u;if(A)for(u=Array(c.length),m=0;m<h.length;m+=3)f=h[m],u[f]=c[f];else u=c;m=0;for(p=h.length;m<p;)k=u[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=
+a.$new(),M.$$addScopeInfo(C(k),l)):l=a,s=c.transcludeOnThisElement?S(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?S(a,b):null,c(f,l,k,d,s)):f&&f(a,k.childNodes,v,e)}for(var h=[],k,l,m,p,A,s=0;s<a.length;s++){k=new na;l=ma(a[s],[],k,0===s?d:v,e);(f=l.length?y(l,a[s],k,b,c,null,[],[],f):null)&&f.scope&&M.$$addScopeClass(k.$$element);k=f&&f.terminal||!(m=a[s].childNodes)||!m.length?null:P(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(s,f,k),p=!0,A=
+A||f;f=null}return p?g:null}function S(a,b,c){var d=function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})},e=d.$$slots=Z(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?S(a,b.$$slots[f],c):null;return d}function ma(a,b,c,d,e){var h=c.$attr,k;switch(a.nodeType){case 1:H(b,va(ra(a)),"E",d,e);for(var l,m,p,s=a.attributes,A=0,u=s&&s.length;A<u;A++){var t=!1,w=!1;l=s[A];k=l.name;m=X(l.value);l=va(k);if(p=pa.test(l))k=
+k.replace(Xc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});(l=l.match(ua))&&O(l[1])&&(t=k,w=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6));l=va(k.toLowerCase());h[l]=k;if(p||!c.hasOwnProperty(l))c[l]=m,Tc(a,l)&&(c[l]=!0);Y(a,b,m,l,p);H(b,l,"A",d,e,t,w)}a=a.className;E(a)&&(a=a.animVal);if(F(a)&&""!==a)for(;k=g.exec(a);)l=va(k[2]),H(b,l,"C",d,e)&&(c[l]=X(k[3])),a=a.substr(k.index+k[0].length);break;case Pa:if(11===xa)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===
+Pa;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);N(b,a.nodeValue);break;case 8:try{if(k=f.exec(a.nodeValue))l=va(k[1]),H(b,l,"M",d,e)&&(c[l]=X(k[2]))}catch(M){}}b.sort(ya);return b}function q(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ja("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return C(d)}function Yc(a,b,c){return function(d,e,f,g,h){e=q(e[0],b,
+c);return a(d,e,f,g,h)}}function ac(a,b,c,d,e,f){if(a)return M(b,c,d,e,f);var g;return function(){g||(g=M(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function y(a,b,d,e,f,g,h,l,m){function p(a,b,c,d){if(a){c&&(a=Yc(a,c,d));a.require=J.require;a.directiveName=H;if(P===J||J.$$isolateScope)a=ca(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=Yc(b,c,d));b.require=J.require;b.directiveName=H;if(P===J||J.$$isolateScope)b=ca(b,{isolateScope:!0});l.push(b)}}function s(a,b,c,d){var e;if(F(b)){var f=
+b.match(k);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw ja("ctreq",b,a);}else if(L(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=s(a,b[g],c,d);else E(b)&&(e={},n(b,function(b,f){e[f]=s(a,b,c,d)}));return e||null}function A(a,b,c,d,e,f){var g=Z(),h;for(h in d){var k=d[h],l={$scope:k===P||k.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},m=k.controller;"@"==m&&
+(m=b[k.name]);l=w(m,l,!0,k.controllerAs);g[k.name]=l;B||a.data("$"+k.name+"Controller",l.instance)}return g}function u(a,c,e,f,g){function k(a,b,c,d){var e;bb(a)||(d=c,c=b,b=a,a=v);B&&(e=ma);c||(c=B?z.parent():z);if(d){var f=g.$$slots[d];if(f)return f(a,b,e,c,Eb);if(x(f))throw ja("noslot",d,ta(z));}else return g(a,b,e,c,Eb)}var m,p,t,w,ma,S,z,Ja;b===e?(f=d,z=d.$$element):(z=C(e),f=new na(z,d));t=c;P?w=c.$new(!0):Q&&(t=c.$parent);g&&(S=k,S.$$boundTransclude=g,S.isSlotFilled=function(a){return!!g.$$slots[a]});
+I&&(ma=A(z,f,S,I,w,c));P&&(M.$$addScopeInfo(z,w,!0,!($&&($===P||$===P.$$originalDirective))),M.$$addScopeClass(z,!0),w.$$isolateBindings=P.$$isolateBindings,(Ja=ia(c,f,w,w.$$isolateBindings,P))&&w.$on("$destroy",Ja));for(p in ma){Ja=I[p];var K=ma[p],la=Ja.$$bindings.bindToController;K.identifier&&la&&(m=ia(t,f,K.instance,la,Ja));var q=K();q!==K.instance&&(K.instance=q,z.data("$"+Ja.name+"Controller",q),m&&m(),m=ia(t,f,K.instance,la,Ja))}n(I,function(a,b){var c=a.require;a.bindToController&&!L(c)&&
+E(c)&&T(ma[b].instance,s(b,c,z,ma))});n(ma,function(a){D(a.instance.$onInit)&&a.instance.$onInit()});m=0;for(p=h.length;m<p;m++)t=h[m],ka(t,t.isolateScope?w:c,z,f,t.require&&s(t.directiveName,t.require,z,ma),S);var Eb=c;P&&(P.template||null===P.templateUrl)&&(Eb=w);a&&a(Eb,e.childNodes,v,g);for(m=l.length-1;0<=m;m--)t=l[m],ka(t,t.isolateScope?w:c,z,f,t.require&&s(t.directiveName,t.require,z,ma),S)}m=m||{};for(var t=-Number.MAX_VALUE,Q=m.newScopeDirective,I=m.controllerDirectives,P=m.newIsolateScopeDirective,
+$=m.templateDirective,S=m.nonTlbTranscludeDirective,z=!1,la=!1,B=m.hasElementTranscludeDirective,ea=d.$$element=C(b),J,H,G,ya=e,O,N=!1,Fb=!1,fa,R=0,Va=a.length;R<Va;R++){J=a[R];var Y=J.$$start,ba=J.$$end;Y&&(ea=q(b,Y,ba));G=v;if(t>J.priority)break;if(fa=J.scope)J.templateUrl||(E(fa)?(Wa("new/isolated scope",P||Q,J,ea),P=J):Wa("new/isolated scope",P,J,ea)),Q=Q||J;H=J.name;if(!N&&(J.replace&&(J.templateUrl||J.template)||J.transclude&&!J.$$tlb)){for(fa=R+1;N=a[fa++];)if(N.transclude&&!N.$$tlb||N.replace&&
+(N.templateUrl||N.template)){Fb=!0;break}N=!0}!J.templateUrl&&J.controller&&(fa=J.controller,I=I||Z(),Wa("'"+H+"' controller",I[H],J,ea),I[H]=J);if(fa=J.transclude)if(z=!0,J.$$tlb||(Wa("transclusion",S,J,ea),S=J),"element"==fa)B=!0,t=J.priority,G=ea,ea=d.$$element=C(W.createComment(" "+H+": "+d[H]+" ")),b=ea[0],aa(f,wa.call(G,0),b),ya=ac(Fb,G,e,t,g&&g.name,{nonTlbTranscludeDirective:S});else{var V=Z();G=C(Yb(b)).contents();if(E(fa)){G=[];var ha=Z(),da=Z();n(fa,function(a,b){var c="?"===a.charAt(0);
+a=c?a.substring(1):a;ha[a]=b;V[b]=null;da[b]=c});n(ea.contents(),function(a){var b=ha[va(ra(a))];b?(da[b]=!0,V[b]=V[b]||[],V[b].push(a)):G.push(a)});n(da,function(a,b){if(!a)throw ja("reqslot",b);});for(var ga in V)V[ga]&&(V[ga]=ac(Fb,V[ga],e))}ea.empty();ya=ac(Fb,G,e,v,v,{needsNewScope:J.$$isolateScope||J.$$newScope});ya.$$slots=V}if(J.template)if(la=!0,Wa("template",$,J,ea),$=J,fa=D(J.template)?J.template(ea,d):J.template,fa=qa(fa),J.replace){g=J;G=Wb.test(fa)?Zc(U(J.templateNamespace,X(fa))):[];
+b=G[0];if(1!=G.length||1!==b.nodeType)throw ja("tplrt",H,"");aa(f,ea,b);Va={$attr:{}};fa=ma(b,[],Va);var oa=a.splice(R+1,a.length-(R+1));(P||Q)&&$c(fa,P,Q);a=a.concat(fa).concat(oa);ad(d,Va);Va=a.length}else ea.html(fa);if(J.templateUrl)la=!0,Wa("template",$,J,ea),$=J,J.replace&&(g=J),u=$f(a.splice(R,a.length-R),ea,d,f,z&&ya,h,l,{controllerDirectives:I,newScopeDirective:Q!==J&&Q,newIsolateScopeDirective:P,templateDirective:$,nonTlbTranscludeDirective:S}),Va=a.length;else if(J.compile)try{O=J.compile(ea,
+d,ya),D(O)?p(null,O,Y,ba):O&&p(O.pre,O.post,Y,ba)}catch(pa){c(pa,ta(ea))}J.terminal&&(u.terminal=!0,t=Math.max(t,J.priority))}u.scope=Q&&!0===Q.scope;u.transcludeOnThisElement=z;u.templateOnThisElement=la;u.transclude=ya;m.hasElementTranscludeDirective=B;return u}function $c(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Sb(a[d],{$$isolateScope:b,$$newScope:c})}function H(b,d,f,g,h,k,l){if(d===h)return null;h=null;if(e.hasOwnProperty(d)){var m;d=a.get(d+"Directive");for(var p=0,A=d.length;p<A;p++)try{m=
+d[p],(x(g)||g>m.priority)&&-1!=m.restrict.indexOf(f)&&(k&&(m=Sb(m,{$$start:k,$$end:l})),b.push(m),h=m)}catch(t){c(t)}}return h}function O(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=c[d],b.multiElement)return!0;return!1}function ad(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;n(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});n(b,function(b,f){"class"==f?($(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+
+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function $f(a,b,c,e,f,g,h,k){var l=[],m,p,s=b[0],A=a.shift(),u=Sb(A,{templateUrl:null,transclude:null,replace:null,$$originalDirective:A}),w=D(A.templateUrl)?A.templateUrl(b,c):A.templateUrl,Q=A.templateNamespace;b.empty();d(w).then(function(d){var t,I;d=qa(d);if(A.replace){d=Wb.test(d)?Zc(U(Q,X(d))):[];t=d[0];if(1!=d.length||1!==t.nodeType)throw ja("tplrt",
+A.name,w);d={$attr:{}};aa(e,b,t);var M=ma(t,[],d);E(A.scope)&&$c(M,!0);a=M.concat(a);ad(c,d)}else t=s,b.html(d);a.unshift(u);m=y(a,t,c,f,b,A,g,h,k);n(e,function(a,c){a==t&&(e[c]=b[0])});for(p=P(b[0].childNodes,f);l.length;){d=l.shift();I=l.shift();var z=l.shift(),K=l.shift(),M=b[0];if(!d.$$destroyed){if(I!==s){var la=I.className;k.hasElementTranscludeDirective&&A.replace||(M=Yb(t));aa(z,C(I),M);$(C(M),la)}I=m.transcludeOnThisElement?S(d,m.transclude,K):K;m(p,d,M,e,I)}}l=null});return function(a,b,
+c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(m.transcludeOnThisElement&&(a=S(b,m.transclude,e)),m(p,b,c,d,a)))}}function ya(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Wa(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ja("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ta(d));}function N(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&M.$$addBindingClass(a);
+return function(a,c){var e=c.parent();b||M.$$addBindingClass(e);M.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function U(a,b){a=G(a||"html");switch(a){case "svg":case "math":var c=W.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function R(a,b){if("srcdoc"==b)return la.HTML;var c=ra(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return la.RESOURCE_URL}function Y(a,c,d,e,
+f){var g=R(a,e);f=h[e]||f;var k=b(d,!0,g,f);if(k){if("multiple"===e&&"select"===ra(a))throw ja("selmulti",ta(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers=Z());if(l.test(e))throw ja("nodomevents");var m=h[e];m!==d&&(k=m&&b(m,!0,g,f),d=m);k&&(h[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e,a)}))}}}})}}function aa(a,b,c){var d=b[0],e=b.length,
+f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=W.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);C.hasData(d)&&(C.data(c,C.data(d)),C(d).off("$destroy"));C.cleanData(a.querySelectorAll("*"));for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function ca(a,b){return T(function(){return a.apply(null,arguments)},a,b)}function ka(a,
+b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ta(d))}}function ia(a,c,d,e,f){var g=[];n(e,function(e,h){var k=e.attrName,l=e.optional,m,A,s,t;switch(e.mode){case "@":l||sa.call(c,k)||(d[h]=c[k]=void 0);c.$observe(k,function(a){F(a)&&(d[h]=a)});c.$$observers[k].$$scope=a;m=c[k];F(m)?d[h]=b(m)(a):Na(m)&&(d[h]=m);break;case "=":if(!sa.call(c,k)){if(l)break;c[k]=void 0}if(l&&!c[k])break;A=p(c[k]);t=A.literal?oa:function(a,b){return a===b||a!==a&&b!==b};s=A.assign||function(){m=d[h]=A(a);throw ja("nonassign",
+c[k],k,f.name);};m=d[h]=A(a);l=function(b){t(b,d[h])||(t(b,m)?s(a,b=d[h]):d[h]=b);return m=b};l.$stateful=!0;l=e.collection?a.$watchCollection(c[k],l):a.$watch(p(c[k],l),null,A.literal);g.push(l);break;case "<":if(!sa.call(c,k)){if(l)break;c[k]=void 0}if(l&&!c[k])break;A=p(c[k]);d[h]=A(a);l=a.$watch(A,function(a){d[h]=a},A.literal);g.push(l);break;case "&":A=c.hasOwnProperty(k)?p(c[k]):B;if(A===B&&l)break;d[h]=function(b){return A(a,b)}}});return g.length&&function(){for(var a=0,b=g.length;a<b;++a)g[a]()}}
+var V=/^\w/,ba=W.createElement("div"),na=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};na.prototype={$normalize:va,$addClass:function(a){a&&0<a.length&&z.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&z.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=bd(a,b);c&&c.length&&z.addClass(this.$$element,c);(c=bd(b,a))&&c.length&&z.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=
+Tc(this.$$element[0],a),g=cd[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Bc(a,"-"));f=ra(this.$$element);if("a"===f&&("href"===a||"xlinkHref"===a)||"img"===f&&"src"===a)this[a]=b=A(b,"src"===a);else if("img"===f&&"srcset"===a){for(var f="",g=X(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+A(X(g[m]),!0),f=f+(" "+X(g[m+1]));g=X(g[2*l]).split(/\s/);
+f+=A(X(g[0]),!0);2===g.length&&(f+=" "+X(g[1]));this[a]=b=f}!1!==d&&(null===b||x(b)?this.$$element.removeAttr(e):V.test(e)?this.$$element.attr(e,b):Q(this.$$element[0],e,b));(a=this.$$observers)&&n(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=Z()),e=d[a]||(d[a]=[]);e.push(b);u.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||x(c[a])||b(c[a])});return function(){cb(e,b)}}};var ha=b.startSymbol(),da=b.endSymbol(),qa="{{"==ha&&"}}"==
+da?ab:function(a){return a.replace(/\{\{/g,ha).replace(/}}/g,da)},pa=/^ngAttr[A-Z]/,ua=/^(.+)Start$/;M.$$addBindingInfo=m?function(a,b){var c=a.data("$binding")||[];L(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:B;M.$$addBindingClass=m?function(a){$(a,"ng-binding")}:B;M.$$addScopeInfo=m?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:B;M.$$addScopeClass=m?function(a,b){$(a,b?"ng-isolate-scope":"ng-scope")}:B;return M}]}function va(a){return gb(a.replace(Xc,
+""))}function bd(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function Zc(a){a=C(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&ag.call(a,b,1);return a}function Wc(a,b){if(b&&F(b))return b;if(F(a)){var d=dd.exec(a);if(d)return d[3]}}function ff(){var a={},b=!1;this.register=function(b,c){Ta(b,"controller");E(b)?T(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=
+["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!E(a.$scope))throw H("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,r;h=!0===h;k&&F(k)&&(r=k);if(F(f)){k=f.match(dd);if(!k)throw bg("ctrlfmt",f);m=k[1];r=r||k[3];f=a.hasOwnProperty(m)?a[m]:Dc(g.$scope,m,!0)||(b?Dc(c,m,!0):v);Sa(f,m,!0)}if(h)return h=(L(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),r&&e(g,r,l,m||f.name),T(function(){var a=d.invoke(f,l,g,m);a!==l&&(E(a)||D(a))&&(l=a,r&&e(g,r,l,m||f.name));
+return l},{instance:l,identifier:r});l=d.instantiate(f,g,m);r&&e(g,r,l,m||f.name);return l}}]}function gf(){this.$get=["$window",function(a){return C(a.document)}]}function hf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function bc(a){return E(a)?V(a)?a.toISOString():eb(a):a}function nf(){this.$get=function(){return function(a){if(!a)return"";var b=[];rc(a,function(a,c){null===a||x(a)||(L(a)?n(a,function(a,d){b.push(ha(c)+"="+ha(bc(a)))}):b.push(ha(c)+"="+ha(bc(a))))});
+return b.join("&")}}}function of(){this.$get=function(){return function(a){function b(a,e,f){null===a||x(a)||(L(a)?n(a,function(a,c){b(a,e+"["+(E(a)?c:"")+"]")}):E(a)&&!V(a)?rc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ha(e)+"="+ha(bc(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function cc(a,b){if(F(a)){var d=a.replace(cg,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(ed))||(c=(c=d.match(dg))&&eg[c[0]].test(d));c&&(a=wc(d))}}return a}function fd(a){var b=
+Z(),d;F(a)?n(a.split("\n"),function(a){d=a.indexOf(":");var e=G(X(a.substr(0,d)));a=X(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):E(a)&&n(a,function(a,d){var f=G(d),g=X(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function gd(a){var b;return function(d){b||(b=fd(a));return d?(d=b[G(d)],void 0===d&&(d=null),d):b}}function hd(a,b,d,c){if(D(c))return c(a,b,d);n(c,function(c){a=c(a,b,d)});return a}function mf(){var a=this.defaults={transformResponse:[cc],transformRequest:[function(a){return E(a)&&"[object File]"!==
+ga.call(a)&&"[object Blob]"!==ga.call(a)&&"[object FormData]"!==ga.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:na(dc),put:na(dc),patch:na(dc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return y(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return y(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory",
+"$rootScope","$q","$injector",function(e,f,g,h,k,l){function m(b){function c(a){var b=T({},a);b.data=hd(a.data,a.headers,a.status,f.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}function e(a,b){var c,d={};n(a,function(a,e){D(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!E(b))throw H("$http")("badreq",b);if(!F(b.url))throw H("$http")("badreq",b.url);var f=T({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},
+b);f.headers=function(b){var c=a.headers,d=T({},b.headers),f,g,h,c=T({},c.common,c[G(b.method)]);a:for(f in c){g=G(f);for(h in d)if(G(h)===g)continue a;d[f]=c[f]}return e(d,na(b))}(b);f.method=ub(f.method);f.paramSerializer=F(f.paramSerializer)?l.get(f.paramSerializer):f.paramSerializer;var g=[function(b){var d=b.headers,e=hd(b.data,gd(d),v,b.transformRequest);x(e)&&n(d,function(a,b){"content-type"===G(b)&&delete d[b]});x(b.withCredentials)&&!x(a.withCredentials)&&(b.withCredentials=a.withCredentials);
+return r(b,e).then(c,c)},v],h=k.when(f);for(n(K,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){b=g.shift();var m=g.shift(),h=h.then(b,m)}d?(h.success=function(a){Sa(a,"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Sa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=id("success"),h.error=id("error"));return h}function r(c,
+d){function g(a,c,d,e){function f(){l(c,a,d,e)}K&&(200<=a&&300>a?K.put(S,[a,c,fd(d),e]):K.remove(S));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function l(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?A.resolve:A.reject)({data:a,status:b,headers:gd(d),config:c,statusText:e})}function r(a){l(a.data,a.status,na(a.headers()),a.statusText)}function z(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var A=k.defer(),Q=A.promise,K,M,P=c.headers,S=s(c.url,c.paramSerializer(c.params));
+m.pendingRequests.push(c);Q.then(z,z);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(K=E(c.cache)?c.cache:E(a.cache)?a.cache:I);K&&(M=K.get(S),y(M)?M&&D(M.then)?M.then(r,r):L(M)?l(M[1],M[0],na(M[2]),M[3]):l(M,200,{},"OK"):K.put(S,Q));x(M)&&((M=jd(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:v)&&(P[c.xsrfHeaderName||a.xsrfHeaderName]=M),e(c.method,S,d,g,P,c.timeout,c.withCredentials,c.responseType));return Q}function s(a,b){0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b);
+return a}var I=g("$http");a.paramSerializer=F(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var K=[];n(c,function(a){K.unshift(F(a)?l.get(a):l.invoke(a))});m.pendingRequests=[];(function(a){n(arguments,function(a){m[a]=function(b,c){return m(T({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){n(arguments,function(a){m[a]=function(b,c,d){return m(T({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");m.defaults=a;return m}]}function qf(){this.$get=
+function(){return function(){return new O.XMLHttpRequest}}}function pf(){this.$get=["$browser","$window","$document","$xhrFactory",function(a,b,d,c){return fg(a,c,a.defer,b.angular.callbacks,d[0])}]}function fg(a,b,d,c,e){function f(a,b,d){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);e.body.removeChild(f);f=null;var g=-1,I="unknown";a&&("load"!==a.type||c[b].called||(a={type:"error"}),
+I=a.type,g="error"===a.type?404:200);d&&d(g,I)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,k,l,m,r,s,I){function K(){w&&w();u&&u.abort()}function t(b,c,e,f,g){y(z)&&d.cancel(z);w=u=null;b(c,e,f,g);a.$$completeOutstandingRequest(B)}a.$$incOutstandingRequestCount();h=h||a.url();if("jsonp"==G(e)){var p="_"+(c.counter++).toString(36);c[p]=function(a){c[p].data=a;c[p].called=!0};var w=f(h.replace("JSON_CALLBACK","angular.callbacks."+
+p),p,function(a,b){t(l,a,c[p].data,"",b);c[p]=B})}else{var u=b(e,h);u.open(e,h,!0);n(m,function(a,b){y(a)&&u.setRequestHeader(b,a)});u.onload=function(){var a=u.statusText||"",b="response"in u?u.response:u.responseText,c=1223===u.status?204:u.status;0===c&&(c=b?200:"file"==za(h).protocol?404:0);t(l,c,b,u.getAllResponseHeaders(),a)};e=function(){t(l,-1,null,null,"")};u.onerror=e;u.onabort=e;s&&(u.withCredentials=!0);if(I)try{u.responseType=I}catch(la){if("json"!==I)throw la;}u.send(x(k)?null:k)}if(0<
+r)var z=d(K,r);else r&&D(r.then)&&r.then(K)}}function kf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(r,a).replace(s,b)}function h(a,b,c,d){var e;return e=a.$watch(function(a){e();return d(a)},b,c)}function k(f,k,r,p){function s(a){try{var b=a;a=r?e.getTrusted(r,b):e.valueOf(b);var d;if(p&&!y(a))d=
+a;else if(null==a)d="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=eb(a)}d=a}return d}catch(g){c(Ka.interr(f,g))}}if(!f.length||-1===f.indexOf(a)){var u;k||(k=g(f),u=ba(k),u.exp=f,u.expressions=[],u.$$watchDelegate=h);return u}p=!!p;var n,z,A=0,Q=[],$=[];u=f.length;for(var M=[],P=[];A<u;)if(-1!=(n=f.indexOf(a,A))&&-1!=(z=f.indexOf(b,n+l)))A!==n&&M.push(g(f.substring(A,n))),A=f.substring(n+l,z),Q.push(A),$.push(d(A,s)),A=z+m,P.push(M.length),M.push("");else{A!==u&&
+M.push(g(f.substring(A)));break}r&&1<M.length&&Ka.throwNoconcat(f);if(!k||Q.length){var S=function(a){for(var b=0,c=Q.length;b<c;b++){if(p&&x(a[b]))return;M[P[b]]=a[b]}return M.join("")};return T(function(a){var b=0,d=Q.length,e=Array(d);try{for(;b<d;b++)e[b]=$[b](a);return S(e)}catch(g){c(Ka.interr(f,g))}},{exp:f,expressions:Q,$$watchDelegate:function(a,b){var c;return a.$watchGroup($,function(d,e){var f=S(d);D(b)&&b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,r=new RegExp(a.replace(/./g,
+f),"g"),s=new RegExp(b.replace(/./g,f),"g");k.startSymbol=function(){return a};k.endSymbol=function(){return b};return k}]}function lf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,k,l,m){function r(){s?f.apply(null,I):f(p)}var s=4<arguments.length,I=s?wa.call(arguments,4):[],K=b.setInterval,t=b.clearInterval,p=0,w=y(m)&&!m,u=(w?c:d).defer(),n=u.promise;l=y(l)?l:0;n.$$intervalId=K(function(){w?e.defer(r):a.$evalAsync(r);u.notify(p++);0<l&&p>=l&&(u.resolve(p),
+t(n.$$intervalId),delete g[n.$$intervalId]);w||a.$apply()},k);g[n.$$intervalId]=u;return n}var g={};f.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return f}]}function ec(a){a=a.split("/");for(var b=a.length;b--;)a[b]=qb(a[b]);return a.join("/")}function kd(a,b){var d=za(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=ca(d.port)||gg[d.protocol]||null}function ld(a,b){var d="/"!==a.charAt(0);
+d&&(a="/"+a);var c=za(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=zc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function pa(a,b){if(0===b.indexOf(a))return b.substr(a.length)}function Ia(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function kb(a){return a.replace(/(#.+)|#$/,"$1")}function fc(a,b,d){this.$$html5=!0;d=d||"";kd(a,this);this.$$parse=function(a){var d=pa(b,
+a);if(!F(d))throw Gb("ipthprfx",a,b);ld(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Ub(this.$$search),d=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ec(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;y(f=pa(a,c))?(g=f,g=y(f=pa(d,f))?b+(pa("/",f)||f):a+g):y(f=pa(b,c))?g=b+f:b==c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function gc(a,b,d){kd(a,this);
+this.$$parse=function(c){var e=pa(a,c)||pa(b,c),f;x(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",x(e)&&(a=c,this.replace())):(f=pa(d,e),x(f)&&(f=e));ld(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=Ub(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ec(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?d+this.$$url:"")};this.$$parseLinkUrl=
+function(b,d){return Ia(a)==Ia(b)?(this.$$parse(b),!0):!1}}function md(a,b,d){this.$$html5=!0;gc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a==Ia(c)?f=c:(g=pa(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=Ub(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ec(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url}}function Hb(a){return function(){return this[a]}}function nd(a,
+b){return function(d){if(x(d))return this[a];this[a]=b(d);this.$$compose();return this}}function rf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return y(b)?(a=b,this):a};this.html5Mode=function(a){return Na(a)?(b.enabled=a,this):E(a)?(Na(a.enabled)&&(b.enabled=a.enabled),Na(a.requireBase)&&(b.requireBase=a.requireBase),Na(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,
+c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var r=c.url(),s;if(b.enabled){if(!m&&b.requireBase)throw Gb("nobase");s=r.substring(0,r.indexOf("/",r.indexOf("//")+2))+(m||"/");m=e.history?fc:md}else s=Ia(r),m=gc;var I=s.substr(0,Ia(s).lastIndexOf("/")+1);l=new m(s,I,"#"+a);l.$$parseLinkUrl(r,r);l.$$state=c.state();
+var n=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=C(a.target);"a"!==ra(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");E(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=za(h.animVal).href);n.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=
+!0))}});kb(l.absUrl())!=kb(r)&&c.url(l.absUrl(),!0);var t=!0;c.onUrlChange(function(a,b){x(pa(I,a))?g.location.href=a:(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=kb(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(t=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=kb(c.url()),b=kb(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;if(t||
+m)t=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))});l.$$replace=!1});return l}]}function sf(){var a=!0,b=this;this.debugEnabled=function(b){return y(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&
+(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||B;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];n(arguments,function(b){a.push(c(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Xa(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===
+a||"__proto__"===a)throw ka("isecfld",b);return a}function hg(a){return a+""}function Aa(a,b){if(a){if(a.constructor===a)throw ka("isecfn",b);if(a.window===a)throw ka("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ka("isecdom",b);if(a===Object)throw ka("isecobj",b);}return a}function od(a,b){if(a){if(a.constructor===a)throw ka("isecfn",b);if(a===ig||a===jg||a===kg)throw ka("isecff",b);}}function Ib(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||
+a==={}.constructor||a===[].constructor||a===Function.constructor))throw ka("isecaf",b);}function lg(a,b){return"undefined"!==typeof a?a:b}function pd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function R(a,b){var d,c;switch(a.type){case q.Program:d=!0;n(a.body,function(a){R(a.expression,b);d=d&&a.expression.constant});a.constant=d;break;case q.Literal:a.constant=!0;a.toWatch=[];break;case q.UnaryExpression:R(a.argument,b);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;
+break;case q.BinaryExpression:R(a.left,b);R(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case q.LogicalExpression:R(a.left,b);R(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case q.ConditionalExpression:R(a.test,b);R(a.alternate,b);R(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case q.Identifier:a.constant=!1;a.toWatch=
+[a];break;case q.MemberExpression:R(a.object,b);a.computed&&R(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case q.CallExpression:d=a.filter?!b(a.callee.name).$stateful:!1;c=[];n(a.arguments,function(a){R(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case q.AssignmentExpression:R(a.left,b);R(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];
+break;case q.ArrayExpression:d=!0;c=[];n(a.elements,function(a){R(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case q.ObjectExpression:d=!0;c=[];n(a.properties,function(a){R(a.value,b);d=d&&a.value.constant;a.value.constant||c.push.apply(c,a.value.toWatch)});a.constant=d;a.toWatch=c;break;case q.ThisExpression:a.constant=!1;a.toWatch=[];break;case q.LocalsExpression:a.constant=!1,a.toWatch=[]}}function qd(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;
+return 1!==b.length?b:b[0]!==a?b:v}}function rd(a){return a.type===q.Identifier||a.type===q.MemberExpression}function sd(a){if(1===a.body.length&&rd(a.body[0].expression))return{type:q.AssignmentExpression,left:a.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function td(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===q.Literal||a.body[0].expression.type===q.ArrayExpression||a.body[0].expression.type===q.ObjectExpression)}function ud(a,b){this.astBuilder=
+a;this.$filter=b}function vd(a,b){this.astBuilder=a;this.$filter=b}function Jb(a){return"constructor"==a}function hc(a){return D(a.valueOf)?a.valueOf():mg.call(a)}function tf(){var a=Z(),b=Z();this.$get=["$filter",function(d){function c(c,f,r){var u,n,z;r=r||K;switch(typeof c){case "string":z=c=c.trim();var A=r?b:a;u=A[z];if(!u){":"===c.charAt(0)&&":"===c.charAt(1)&&(n=!0,c=c.substring(2));u=r?I:s;var Q=new ic(u);u=(new jc(Q,d,u)).parse(c);u.constant?u.$$watchDelegate=l:n?u.$$watchDelegate=u.literal?
+k:h:u.inputs&&(u.$$watchDelegate=g);r&&(u=e(u));A[z]=u}return m(u,f);case "function":return m(c,f);default:return m(B,f)}}function e(a){function b(c,d,e,f){var g=K;K=!0;try{return a(c,d,e,f)}finally{K=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate;b.assign=e(a.assign);b.constant=a.constant;b.literal=a.literal;for(var c=0;a.inputs&&c<a.inputs.length;++c)a.inputs[c]=e(a.inputs[c]);b.inputs=a.inputs;return b}function f(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=hc(a),"object"===
+typeof a)?!1:a===b||a!==a&&b!==b}function g(a,b,c,d,e){var g=d.inputs,h;if(1===g.length){var k=f,g=g[0];return a.$watch(function(a){var b=g(a);f(b,k)||(h=d(a,v,v,[b]),k=b&&hc(b));return h},b,c,e)}for(var l=[],m=[],r=0,s=g.length;r<s;r++)l[r]=f,m[r]=null;return a.$watch(function(a){for(var b=!1,c=0,e=g.length;c<e;c++){var k=g[c](a);if(b||(b=!f(k,l[c])))m[c]=k,l[c]=k&&hc(k)}b&&(h=d(a,v,v,m));return h},b,c,e)}function h(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;
+D(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function k(a,b,c,d){function e(a){var b=!0;n(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;D(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function l(a,b,c,d){var e;return e=a.$watch(function(a){e();return d(a)},b,c)}function m(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==k&&c!==h?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,
+c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return y(e)?c:e};a.$$watchDelegate&&a.$$watchDelegate!==g?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=g,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]);return c}var r=Ea().noUnsafeEval,s={csp:r,expensiveChecks:!1},I={csp:r,expensiveChecks:!0},K=!1;c.$$runningExpensiveChecks=function(){return K};return c}]}function vf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return wd(function(b){a.$evalAsync(b)},b)}]}function wf(){this.$get=
+["$browser","$exceptionHandler",function(a,b){return wd(function(b){a.defer(b)},b)}]}function wd(a,b){function d(){this.$$state={status:0}}function c(a,b){return function(c){b.call(a,c)}}function e(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending;c.processScheduled=!1;c.pending=v;for(var f=0,g=e.length;f<g;++f){d=e[f][0];a=e[f][c.status];try{D(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function f(){this.promise=
+new d}var g=H("$q",TypeError);T(d.prototype,{then:function(a,b,c){if(x(a)&&x(b)&&x(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&e(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}});T(f.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(g("qcycle",
+a)):this.$$resolve(a))},$$resolve:function(a){function d(a){k||(k=!0,h.$$resolve(a))}function f(a){k||(k=!0,h.$$reject(a))}var g,h=this,k=!1;try{if(E(a)||D(a))g=a&&a.then;D(g)?(this.promise.$$state.status=-1,g.call(a,d,f,c(this,this.notify))):(this.promise.$$state.value=a,this.promise.$$state.status=1,e(this.promise.$$state))}catch(l){f(l),b(l)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;e(this.promise.$$state)},
+notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;f<g;f++){e=d[f][0];a=d[f][3];try{e.notify(D(a)?a(c):c)}catch(h){b(h)}}})}});var h=function(a,b){var c=new f;b?c.resolve(a):c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{D(c)&&(d=c())}catch(e){return h(e,!1)}return d&&D(d.then)?d.then(function(){return h(a,b)},function(a){return h(a,!1)}):h(a,b)},l=function(a,b,c,d){var e=new f;e.resolve(a);return e.promise.then(b,
+c,d)},m=function(a){if(!D(a))throw g("norslvr",a);var b=new f;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};m.prototype=d.prototype;m.defer=function(){var a=new f;a.resolve=c(a,a.resolve);a.reject=c(a,a.reject);a.notify=c(a,a.notify);return a};m.reject=function(a){var b=new f;b.reject(a);return b.promise};m.when=l;m.resolve=l;m.all=function(a){var b=new f,c=0,d=L(a)?[]:{};n(a,function(a,e){c++;l(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||
+b.reject(a)})});0===c&&b.resolve(d);return b.promise};return m}function Ff(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function uf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=
+this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++pb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=H("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,h){function k(a){a.currentScope.$$destroyed=!0}function l(a){9===xa&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=
+a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++pb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function r(a){if(w.$$phase)throw d("inprog",w.$$phase);w.$$phase=a}function s(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function I(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&
+delete a.$$listenerCount[c];while(a=a.$parent)}function q(){}function t(){for(;z.length;)try{z.shift()()}catch(a){f(a)}e=null}function p(){null===e&&(e=h.defer(function(){w.$apply(t)}))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!=this)&&d.$on("$destroy",
+k);return d},$watch:function(a,b,d,e){var f=g(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l={fn:b,last:q,get:f,exp:e||a,eq:!!d};c=null;D(b)||(l.fn=B);k||(k=h.$$watchers=[]);k.unshift(l);s(this,1);return function(){0<=cb(k,l)&&s(h,-1);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=
+!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});n(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!x(e)){if(E(e))if(Ca(e))for(f!==r&&(f=r,u=f.length=0,l++),a=e.length,u!==a&&(l++,f.length=u=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==s&&(f=s={},u=0,l++);a=0;for(b in e)sa.call(e,
+b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(u++,f[b]=g,l++));if(u>a)for(b in l++,f)sa.call(e,b)||(u--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),r=[],s={},p=!0,u=0;return this.$watch(m,function(){p?(p=!1,b(e,e,d)):b(e,h,d);if(k)if(E(e))if(Ca(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)sa.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,k,l,m,s,p,n,I=b,z,y=[],x,C;
+r("$digest");h.$$checkUrlChange();this===w&&null!==e&&(h.defer.cancel(e),t());c=null;do{n=!1;for(z=this;u.length;){try{C=u.shift(),C.scope.$eval(C.expression,C.locals)}catch(B){f(B)}c=null}a:do{if(s=z.$$watchers)for(p=s.length;p--;)try{if(a=s[p])if(m=a.get,(g=m(z))!==(k=a.last)&&!(a.eq?oa(g,k):"number"===typeof g&&"number"===typeof k&&isNaN(g)&&isNaN(k)))n=!0,c=a,a.last=a.eq?Oa(g,null):g,l=a.fn,l(g,k===q?g:k,z),5>I&&(x=4-I,y[x]||(y[x]=[]),y[x].push({msg:D(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):
+a.exp,newVal:g,oldVal:k}));else if(a===c){n=!1;break a}}catch(E){f(E)}if(!(s=z.$$watchersCount&&z.$$childHead||z!==this&&z.$$nextSibling))for(;z!==this&&!(s=z.$$nextSibling);)z=z.$parent}while(z=s);if((n||u.length)&&!I--)throw w.$$phase=null,d("infdig",b,y);}while(n||u.length);for(w.$$phase=null;v.length;)try{v.shift()()}catch(H){f(H)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===w&&h.$$applicationDestroyed();s(this,-this.$$watchersCount);
+for(var b in this.$$listenerCount)I(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=B;this.$on=this.$watch=this.$watchGroup=function(){return B};this.$$listeners={};this.$$nextSibling=
+null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){w.$$phase||u.length||h.defer(function(){u.length&&w.$digest()});u.push({scope:this,expression:g(a),locals:b})},$$postDigest:function(a){v.push(a)},$apply:function(a){try{r("$apply");try{return this.$eval(a)}finally{w.$$phase=null}}catch(b){f(b)}finally{try{w.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&z.push(b);a=g(a);p()},$on:function(a,b){var c=this.$$listeners[a];
+c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,I(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,
+k)}catch(r){f(r)}else d.splice(l,1),l--,m--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=db([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&
+c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var w=new m,u=w.$$asyncQueue=[],v=w.$$postDigestQueue=[],z=w.$$applyAsyncQueue=[];return w}]}function ne(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=
+c?b:a,f;f=za(d).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function ng(a){if("self"===a)return a;if(F(a)){if(-1<a.indexOf("***"))throw Ba("iwcard",a);a=xd(a).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+a+"$")}if($a(a))return new RegExp("^"+a.source+"$");throw Ba("imatcher");}function yd(a){var b=[];y(a)&&n(a,function(a){b.push(ng(a))});return b}function yf(){this.SCE_CONTEXTS=qa;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=yd(b));return a};
+this.resourceUrlBlacklist=function(a){arguments.length&&(b=yd(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?jd(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ba("unsafe");};d.has("$sanitize")&&(f=d.get("$sanitize"));
+var g=e(),h={};h[qa.HTML]=e(g);h[qa.CSS]=e(g);h[qa.URL]=e(g);h[qa.JS]=e(g);h[qa.RESOURCE_URL]=e(h[qa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ba("icontext",a,b);if(null===b||x(b)||""===b)return b;if("string"!==typeof b)throw Ba("itype",a);return new c(b)},getTrusted:function(d,e){if(null===e||x(e)||""===e)return e;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===qa.RESOURCE_URL){var g=za(e.toString()),r,s,n=!1;
+r=0;for(s=a.length;r<s;r++)if(c(a[r],g)){n=!0;break}if(n)for(r=0,s=b.length;r<s;r++)if(c(b[r],g)){n=!1;break}if(n)return e;throw Ba("insecurl",e.toString());}if(d===qa.HTML)return f(e);throw Ba("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function xf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>xa)throw Ba("iequirks");var c=na(qa);c.isEnabled=function(){return a};c.trustAs=d.trustAs;
+c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=ab);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;n(qa,function(a,b){var d=G(b);c[gb("parse_as_"+d)]=function(b){return e(a,b)};c[gb("get_trusted_"+d)]=function(b){return f(a,b)};c[gb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function zf(){this.$get=["$window","$document",
+function(a,b){var d={},c=ca((/android (\d+)/.exec(G((a.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((a.navigator||{}).userAgent),f=b[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,k=f.body&&f.body.style,l=!1,m=!1;if(k){for(var r in k)if(l=h.exec(r)){g=l[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||g+"Transition"in k);m=!!("animation"in k||g+"Animation"in k);!c||l&&m||(l=F(k.webkitTransition),m=F(k.webkitAnimation))}return{history:!(!a.history||
+!a.history.pushState||4>c||e),hasEvent:function(a){if("input"===a&&11>=xa)return!1;if(x(d[a])){var b=f.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ea(),vendorPrefix:g,transitions:l,animations:m,android:c}}]}function Bf(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$templateCache","$http","$q","$sce",function(b,d,c,e){function f(g,h){f.totalPendingRequests++;F(g)&&b.get(g)||(g=e.getTrustedResourceUrl(g));var k=d.defaults&&d.defaults.transformResponse;L(k)?k=k.filter(function(a){return a!==
+cc}):k===cc&&(k=null);return d.get(g,T({cache:b,transformResponse:k},a))["finally"](function(){f.totalPendingRequests--}).then(function(a){b.put(g,a.data);return a.data},function(a){if(!h)throw ja("tpload",g,a.status,a.statusText);return c.reject(a)})}f.totalPendingRequests=0;return f}]}function Cf(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];n(a,function(a){var c=ia.element(a).data("$binding");
+c&&n(c,function(c){d?(new RegExp("(^|\\s)"+xd(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!=c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Df(){this.$get=["$rootScope",
+"$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,k,l){D(f)||(l=k,k=f,f=B);var m=wa.call(arguments,3),r=y(l)&&!l,s=(r?c:d).defer(),n=s.promise,q;q=b.defer(function(){try{s.resolve(f.apply(null,m))}catch(b){s.reject(b),e(b)}finally{delete g[n.$$timeoutId]}r||a.$apply()},k);n.$$timeoutId=q;g[q]=s;return n}var g={};f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function za(a){xa&&
+(Y.setAttribute("href",a),a=Y.href);Y.setAttribute("href",a);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function jd(a){a=F(a)?za(a):a;return a.protocol===zd.protocol&&a.host===zd.host}function Ef(){this.$get=ba(O)}function Ad(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}
+var d=a[0]||{},c={},e="";return function(){var a,g,h,k,l;a=d.cookie||"";if(a!==e)for(e=a,a=e.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),x(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function If(){this.$get=Ad}function Lc(a){function b(d,c){if(E(d)){var e={};n(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",Bd);b("date",Cd);
+b("filter",og);b("json",pg);b("limitTo",qg);b("lowercase",rg);b("number",Dd);b("orderBy",Ed);b("uppercase",sg)}function og(){return function(a,b,d){if(!Ca(a)){if(null==a)return a;throw H("filter")("notarray",a);}var c;switch(kc(b)){case "function":break;case "boolean":case "null":case "number":case "string":c=!0;case "object":b=tg(b,d,c);break;default:return a}return Array.prototype.filter.call(a,b)}}function tg(a,b,d){var c=E(a)&&"$"in a;!0===b?b=oa:D(b)||(b=function(a,b){if(x(a))return!1;if(null===
+a||null===b)return a===b;if(E(b)||E(a)&&!tc(a))return!1;a=G(""+a);b=G(""+b);return-1!==a.indexOf(b)});return function(e){return c&&!E(e)?La(e,a.$,b,!1):La(e,a,b,d)}}function La(a,b,d,c,e){var f=kc(a),g=kc(b);if("string"===g&&"!"===b.charAt(0))return!La(a,b.substring(1),d,c);if(L(a))return a.some(function(a){return La(a,b,d,c)});switch(f){case "object":var h;if(c){for(h in a)if("$"!==h.charAt(0)&&La(a[h],b,d,!0))return!0;return e?!1:La(a,b,d,!1)}if("object"===g){for(h in b)if(e=b[h],!D(e)&&!x(e)&&
+(f="$"===h,!La(f?a:a[h],e,d,f,f)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function kc(a){return null===a?"null":typeof a}function Bd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){x(c)&&(c=b.CURRENCY_SYM);x(e)&&(e=b.PATTERNS[1].maxFrac);return null==a?a:Fd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(/\u00A4/g,c)}}function Dd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Fd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function ug(a){var b=
+0,d,c,e,f,g;-1<(c=a.indexOf(Gd))&&(a=a.replace(Gd,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)==lc;e++);if(e==(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)==lc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Hd&&(d=d.splice(0,Hd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function vg(a,b,d,c){var e=a.d,f=e.length-a.i;b=x(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d)e.splice(d);else{a.i=1;e.length=d=b+1;for(var g=0;g<d;g++)e[g]=
+0}for(5<=c&&e[d-1]++;f<b;f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Fd(a,b,d,c,e){if(!F(a)&&!N(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,h=Math.abs(a)+"",k="";if(f)k="\u221e";else{g=ug(h);vg(g,e,b.minFrac,b.maxFrac);k=g.d;h=g.i;e=g.e;f=[];for(g=k.reduce(function(a,b){return a&&!b},!0);0>h;)k.unshift(0),h++;0<h?f=k.splice(h):(f=k,k=[0]);h=[];for(k.length>b.lgSize&&h.unshift(k.splice(-b.lgSize).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize).join(""));
+k.length&&h.unshift(k.join(""));k=h.join(d);f.length&&(k+=c+f.join(""));e&&(k+="e+"+e)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+k+b.posSuf}function Kb(a,b,d){var c="";0>a&&(c="-",a=-a);for(a=""+a;a.length<b;)a=lc+a;d&&(a=a.substr(a.length-b));return c+a}function aa(a,b,d,c){d=d||0;return function(e){e=e["get"+a]();if(0<d||e>-d)e+=d;0===e&&-12==d&&(e=12);return Kb(e,b,c)}}function Lb(a,b){return function(d,c){var e=d["get"+a](),f=ub(b?"SHORT"+a:a);return c[f][e]}}function Id(a){var b=(new Date(a,
+0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Jd(a){return function(b){var d=Id(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Kb(b,a)}}function mc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Cd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=ca(b[9]+b[10]),g=ca(b[9]+b[11]));h.call(a,ca(b[1]),ca(b[2])-
+1,ca(b[3]));f=ca(b[4]||0)-f;g=ca(b[5]||0)-g;h=ca(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,f){var g="",h=[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;F(c)&&(c=wg.test(c)?ca(c):b(c));N(c)&&(c=new Date(c));if(!V(c)||!isFinite(c.getTime()))return c;for(;d;)(l=xg.exec(d))?(h=db(h,l,1),d=h.pop()):(h.push(d),d=null);var m=c.getTimezoneOffset();
+f&&(m=xc(f,m),c=Tb(c,f,!0));n(h,function(b){k=yg[b];g+=k?k(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function pg(){return function(a,b){x(b)&&(b=2);return eb(a,b)}}function qg(){return function(a,b,d){b=Infinity===Math.abs(Number(b))?Number(b):ca(b);if(isNaN(b))return a;N(a)&&(a=a.toString());if(!L(a)&&!F(a))return a;d=!d||isNaN(d)?0:ca(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?a.slice(d,d+b):0===d?a.slice(b,a.length):a.slice(Math.max(0,d+b),
+d)}}function Ed(a){function b(b,d){d=d?-1:1;return b.map(function(b){var c=1,h=ab;if(D(b))h=b;else if(F(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(h=a(b),h.constant))var k=h(),h=function(a){return a[k]}}return{get:h,descending:c*d}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(a,e,f){if(null==a)return a;if(!Ca(a))throw H("orderBy")("notarray",a);L(e)||(e=[e]);0===e.length&&
+(e=["+"]);var g=b(e,f);g.push({get:function(){return{}},descending:f?-1:1});a=Array.prototype.map.call(a,function(a,b){return{value:a,predicateValues:g.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("string"===c)e=e.toLowerCase();else if("object"===c)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),d(e)))break a;if(tc(e)&&(e=e.toString(),d(e)))break a;e=b}return{value:e,type:c}})}});a.sort(function(a,b){for(var c=0,d=0,e=g.length;d<e;++d){var c=a.predicateValues[d],
+f=b.predicateValues[d],n=0;c.type===f.type?c.value!==f.value&&(n=c.value<f.value?-1:1):n=c.type<f.type?-1:1;if(c=n*g[d].descending)break}return c});return a=a.map(function(a){return a.value})}}function Ma(a){D(a)&&(a={link:a});a.restrict=a.restrict||"AC";return ba(a)}function Kd(a,b,d,c,e){var f=this,g=[];f.$error={};f.$$success={};f.$pending=v;f.$name=e(b.name||b.ngForm||"")(d);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;f.$$parentForm=Mb;f.$rollbackViewValue=function(){n(g,
+function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){n(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Ta(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a);a.$$parentForm=f};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];n(f.$pending,function(b,c){f.$setValidity(c,null,a)});n(f.$error,function(b,c){f.$setValidity(c,null,a)});n(f.$$success,function(b,c){f.$setValidity(c,
+null,a)});cb(g,a);a.$$parentForm=Mb};Ld({ctrl:this,$element:a,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(cb(d,c),0===d.length&&delete a[b])},$animate:c});f.$setDirty=function(){c.removeClass(a,Ya);c.addClass(a,Nb);f.$dirty=!0;f.$pristine=!1;f.$$parentForm.$setDirty()};f.$setPristine=function(){c.setClass(a,Ya,Nb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;n(g,function(a){a.$setPristine()})};f.$setUntouched=function(){n(g,
+function(a){a.$setUntouched()})};f.$setSubmitted=function(){c.addClass(a,"ng-submitted");f.$submitted=!0;f.$$parentForm.$setSubmitted()}}function nc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function lb(a,b,d,c,e,f){var g=G(b[0].type);if(!e.android){var h=!1;b.on("compositionstart",function(a){h=!0});b.on("compositionend",function(){h=!1;k()})}var k=function(a){l&&(f.defer.cancel(l),l=null);if(!h){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||
+(e=X(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",k);else{var l,m=function(a,b,c){l||(l=f.defer(function(){l=null;b&&b.value===c||k(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut",m)}b.on("change",k);c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Ob(a,b){return function(d,c){var e,
+f;if(V(d))return d;if(F(d)){'"'==d.charAt(0)&&'"'==d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(zg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},n(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function mb(a,b,d,c){return function(e,
+f,g,h,k,l,m){function r(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function s(a){return y(a)&&!V(a)?d(a)||v:a}Md(e,f,g,h);lb(e,f,g,h,k,l);var n=h&&h.$options&&h.$options.timezone,q;h.$$parserName=a;h.$parsers.push(function(a){return h.$isEmpty(a)?null:b.test(a)?(a=d(a,q),n&&(a=Tb(a,n)),a):v});h.$formatters.push(function(a){if(a&&!V(a))throw nb("datefmt",a);if(r(a))return(q=a)&&n&&(q=Tb(q,n,!0)),m("date")(a,c,n);q=null;return""});if(y(g.min)||g.ngMin){var t;h.$validators.min=function(a){return!r(a)||
+x(t)||d(a)>=t};g.$observe("min",function(a){t=s(a);h.$validate()})}if(y(g.max)||g.ngMax){var p;h.$validators.max=function(a){return!r(a)||x(p)||d(a)<=p};g.$observe("max",function(a){p=s(a);h.$validate()})}}}function Md(a,b,d,c){(c.$$hasNativeValidators=E(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};return c.badInput||c.typeMismatch?v:a})}function Nd(a,b,d,c,e){if(y(c)){a=a(c);if(!a.constant)throw nb("constexpr",d,c);return a(b)}return e}function oc(a,b){a="ngClass"+a;
+return["$animate",function(d){function c(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){var b=[];return L(a)?(n(a,function(a){b=b.concat(e(a))}),b):F(a)?a.split(" "):E(a)?(n(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||Z(),d=[];n(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",
+c);return d.join(" ")}function l(a){if(!0===b||f.$index%2===b){var l=e(a||[]);if(!m){var n=k(l,1);h.$addClass(n)}else if(!oa(a,m)){var q=e(m),n=c(l,q),l=c(q,l),n=k(n,1),l=k(l,-1);n&&n.length&&d.addClass(g,n);l&&l.length&&d.removeClass(g,l)}}m=na(a)}var m;f.$watch(h[a],l,!0);h.$observe("class",function(b){l(f.$eval(h[a]))});"ngClass"!==a&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=e(f.$eval(h[a]));g===b?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}function Ld(a){function b(a,
+b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function d(a,c){a=a?"-"+Bc(a,"-"):"";b(ob+a,!0===c);b(Od+a,!1===c)}var c=a.ctrl,e=a.$element,f={},g=a.set,h=a.unset,k=a.$animate;f[Od]=!(f[ob]=e.hasClass(ob));c.$setValidity=function(a,e,f){x(e)?(c.$pending||(c.$pending={}),g(c.$pending,a,f)):(c.$pending&&h(c.$pending,a,f),Pd(c.$pending)&&(c.$pending=v));Na(e)?e?(h(c.$error,a,f),g(c.$$success,a,f)):(g(c.$error,a,f),h(c.$$success,a,f)):(h(c.$error,a,f),h(c.$$success,a,f));
+c.$pending?(b(Qd,!0),c.$valid=c.$invalid=v,d("",null)):(b(Qd,!1),c.$valid=Pd(c.$error),c.$invalid=!c.$valid,d("",c.$valid));e=c.$pending&&c.$pending[a]?v:c.$error[a]?!1:c.$$success[a]?!0:null;d(a,e);c.$$parentForm.$setValidity(a,e,c)}}function Pd(a){if(a)for(var b in

<TRUNCATED>

[31/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx-in.js
new file mode 100644
index 0000000..a0417d1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx-in.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092b\u0941\u0902",
+      "\u092c\u0947\u0932\u093e\u0938\u0947"
+    ],
+    "DAY": [
+      "\u0930\u092c\u093f\u092c\u093e\u0930",
+      "\u0938\u092e\u092c\u093e\u0930",
+      "\u092e\u0902\u0917\u0932\u092c\u093e\u0930",
+      "\u092c\u0941\u0926\u092c\u093e\u0930",
+      "\u092c\u093f\u0938\u0925\u093f\u092c\u093e\u0930",
+      "\u0938\u0941\u0916\u0941\u0930\u092c\u093e\u0930",
+      "\u0938\u0941\u0928\u093f\u092c\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928"
+    ],
+    "ERAS": [
+      "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u0938",
+      "\u090f\u092b\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0907",
+      "\u0906\u0917\u0938\u094d\u0925",
+      "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0905\u0916\u0925\u092c\u0930",
+      "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u092c\u093f",
+      "\u0938\u092e",
+      "\u092e\u0902\u0917\u0932",
+      "\u092c\u0941\u0926",
+      "\u092c\u093f\u0938\u0925\u093f",
+      "\u0938\u0941\u0916\u0941\u0930",
+      "\u0938\u0941\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u0938",
+      "\u090f\u092b\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0907",
+      "\u0906\u0917\u0938\u094d\u0925",
+      "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0905\u0916\u0925\u092c\u0930",
+      "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u0938",
+      "\u090f\u092b\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0907",
+      "\u0906\u0917\u0938\u094d\u0925",
+      "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0905\u0916\u0925\u092c\u0930",
+      "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "brx-in",
+  "localeID": "brx_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx.js
new file mode 100644
index 0000000..b909ab2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_brx.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u092b\u0941\u0902",
+      "\u092c\u0947\u0932\u093e\u0938\u0947"
+    ],
+    "DAY": [
+      "\u0930\u092c\u093f\u092c\u093e\u0930",
+      "\u0938\u092e\u092c\u093e\u0930",
+      "\u092e\u0902\u0917\u0932\u092c\u093e\u0930",
+      "\u092c\u0941\u0926\u092c\u093e\u0930",
+      "\u092c\u093f\u0938\u0925\u093f\u092c\u093e\u0930",
+      "\u0938\u0941\u0916\u0941\u0930\u092c\u093e\u0930",
+      "\u0938\u0941\u0928\u093f\u092c\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928"
+    ],
+    "ERAS": [
+      "\u0908\u0938\u093e.\u092a\u0942\u0930\u094d\u0935",
+      "\u0938\u0928"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u0938",
+      "\u090f\u092b\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0907",
+      "\u0906\u0917\u0938\u094d\u0925",
+      "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0905\u0916\u0925\u092c\u0930",
+      "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u092c\u093f",
+      "\u0938\u092e",
+      "\u092e\u0902\u0917\u0932",
+      "\u092c\u0941\u0926",
+      "\u092c\u093f\u0938\u0925\u093f",
+      "\u0938\u0941\u0916\u0941\u0930",
+      "\u0938\u0941\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u0938",
+      "\u090f\u092b\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0907",
+      "\u0906\u0917\u0938\u094d\u0925",
+      "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0905\u0916\u0925\u092c\u0930",
+      "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u093e\u0928\u0941\u0935\u093e\u0930\u0940",
+      "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u0938",
+      "\u090f\u092b\u094d\u0930\u093f\u0932",
+      "\u092e\u0947",
+      "\u091c\u0941\u0928",
+      "\u091c\u0941\u0932\u093e\u0907",
+      "\u0906\u0917\u0938\u094d\u0925",
+      "\u0938\u0947\u092c\u0925\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0905\u0916\u0925\u092c\u0930",
+      "\u0928\u092c\u0947\u091c\u094d\u092c\u093c\u0930",
+      "\u0926\u093f\u0938\u0947\u091c\u094d\u092c\u093c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "brx",
+  "localeID": "brx",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl-ba.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl-ba.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl-ba.js
new file mode 100644
index 0000000..45e4450
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl-ba.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e\u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0438\u0458\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0438",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH:mm:ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy. HH:mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bs-cyrl-ba",
+  "localeID": "bs_Cyrl_BA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl.js
new file mode 100644
index 0000000..0f0cdf2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-cyrl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e\u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0438\u0458\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0438",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d\u0438",
+      "\u0458\u0443\u043b\u0438",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH:mm:ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy. HH:mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bs-cyrl",
+  "localeID": "bs_Cyrl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn-ba.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn-ba.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn-ba.js
new file mode 100644
index 0000000..0a819c9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn-ba.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "prije podne",
+      "popodne"
+    ],
+    "DAY": [
+      "nedjelja",
+      "ponedjeljak",
+      "utorak",
+      "srijeda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Prije nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sri",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd. MMM. y. HH:mm:ss",
+    "mediumDate": "dd. MMM. y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy. HH:mm",
+    "shortDate": "dd.MM.yy.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bs-latn-ba",
+  "localeID": "bs_Latn_BA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn.js
new file mode 100644
index 0000000..404daf8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "prije podne",
+      "popodne"
+    ],
+    "DAY": [
+      "nedjelja",
+      "ponedjeljak",
+      "utorak",
+      "srijeda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Prije nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sri",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd. MMM. y. HH:mm:ss",
+    "mediumDate": "dd. MMM. y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy. HH:mm",
+    "shortDate": "dd.MM.yy.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bs-latn",
+  "localeID": "bs_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs.js
new file mode 100644
index 0000000..e1f4cd1
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_bs.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "prije podne",
+      "popodne"
+    ],
+    "DAY": [
+      "nedjelja",
+      "ponedjeljak",
+      "utorak",
+      "srijeda",
+      "\u010detvrtak",
+      "petak",
+      "subota"
+    ],
+    "ERANAMES": [
+      "Prije nove ere",
+      "Nove ere"
+    ],
+    "ERAS": [
+      "p. n. e.",
+      "n. e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "SHORTDAY": [
+      "ned",
+      "pon",
+      "uto",
+      "sri",
+      "\u010det",
+      "pet",
+      "sub"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "maj",
+      "jun",
+      "jul",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "mart",
+      "april",
+      "maj",
+      "juni",
+      "juli",
+      "august",
+      "septembar",
+      "oktobar",
+      "novembar",
+      "decembar"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd. MMM. y. HH:mm:ss",
+    "mediumDate": "dd. MMM. y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy. HH:mm",
+    "shortDate": "dd.MM.yy.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "bs",
+  "localeID": "bs",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn-er.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn-er.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn-er.js
new file mode 100644
index 0000000..f6ee233
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn-er.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u134b\u12f1\u1235 \u1303\u1265",
+      "\u134b\u12f1\u1235 \u12f0\u121d\u1262"
+    ],
+    "DAY": [
+      "\u1230\u1295\u1260\u122d \u1245\u12f3\u12c5",
+      "\u1230\u1291",
+      "\u1230\u120a\u131d",
+      "\u1208\u1313 \u12c8\u122a \u1208\u1265\u12cb",
+      "\u12a3\u121d\u12f5",
+      "\u12a3\u122d\u1265",
+      "\u1230\u1295\u1260\u122d \u123d\u1313\u12c5"
+    ],
+    "MONTH": [
+      "\u120d\u12f0\u1275\u122a",
+      "\u12ab\u1265\u12bd\u1265\u1272",
+      "\u12ad\u1265\u120b",
+      "\u134b\u1305\u12ba\u122a",
+      "\u12ad\u1262\u1245\u122a",
+      "\u121d\u12aa\u12a4\u120d \u1275\u131f\u1292\u122a",
+      "\u12b0\u122d\u12a9",
+      "\u121b\u122d\u12eb\u121d \u1275\u122a",
+      "\u12eb\u12b8\u1292 \u1218\u1233\u1245\u1208\u122a",
+      "\u1218\u1270\u1209",
+      "\u121d\u12aa\u12a4\u120d \u1218\u123d\u12c8\u122a",
+      "\u1270\u1215\u1233\u1235\u122a"
+    ],
+    "SHORTDAY": [
+      "\u1230/\u1245",
+      "\u1230\u1291",
+      "\u1230\u120a\u131d",
+      "\u1208\u1313",
+      "\u12a3\u121d\u12f5",
+      "\u12a3\u122d\u1265",
+      "\u1230/\u123d"
+    ],
+    "SHORTMONTH": [
+      "\u120d\u12f0\u1275",
+      "\u12ab\u1265\u12bd",
+      "\u12ad\u1265\u120b",
+      "\u134b\u1305\u12ba",
+      "\u12ad\u1262\u1245",
+      "\u121d/\u1275",
+      "\u12b0\u122d",
+      "\u121b\u122d\u12eb",
+      "\u12eb\u12b8\u1292",
+      "\u1218\u1270\u1209",
+      "\u121d/\u121d",
+      "\u1270\u1215\u1233"
+    ],
+    "fullDate": "EEEE\u1361 dd MMMM \u130d\u122d\u130b y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "byn-er",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn.js
new file mode 100644
index 0000000..578ce6d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_byn.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u134b\u12f1\u1235 \u1303\u1265",
+      "\u134b\u12f1\u1235 \u12f0\u121d\u1262"
+    ],
+    "DAY": [
+      "\u1230\u1295\u1260\u122d \u1245\u12f3\u12c5",
+      "\u1230\u1291",
+      "\u1230\u120a\u131d",
+      "\u1208\u1313 \u12c8\u122a \u1208\u1265\u12cb",
+      "\u12a3\u121d\u12f5",
+      "\u12a3\u122d\u1265",
+      "\u1230\u1295\u1260\u122d \u123d\u1313\u12c5"
+    ],
+    "MONTH": [
+      "\u120d\u12f0\u1275\u122a",
+      "\u12ab\u1265\u12bd\u1265\u1272",
+      "\u12ad\u1265\u120b",
+      "\u134b\u1305\u12ba\u122a",
+      "\u12ad\u1262\u1245\u122a",
+      "\u121d\u12aa\u12a4\u120d \u1275\u131f\u1292\u122a",
+      "\u12b0\u122d\u12a9",
+      "\u121b\u122d\u12eb\u121d \u1275\u122a",
+      "\u12eb\u12b8\u1292 \u1218\u1233\u1245\u1208\u122a",
+      "\u1218\u1270\u1209",
+      "\u121d\u12aa\u12a4\u120d \u1218\u123d\u12c8\u122a",
+      "\u1270\u1215\u1233\u1235\u122a"
+    ],
+    "SHORTDAY": [
+      "\u1230/\u1245",
+      "\u1230\u1291",
+      "\u1230\u120a\u131d",
+      "\u1208\u1313",
+      "\u12a3\u121d\u12f5",
+      "\u12a3\u122d\u1265",
+      "\u1230/\u123d"
+    ],
+    "SHORTMONTH": [
+      "\u120d\u12f0\u1275",
+      "\u12ab\u1265\u12bd",
+      "\u12ad\u1265\u120b",
+      "\u134b\u1305\u12ba",
+      "\u12ad\u1262\u1245",
+      "\u121d/\u1275",
+      "\u12b0\u122d",
+      "\u121b\u122d\u12eb",
+      "\u12eb\u12b8\u1292",
+      "\u1218\u1270\u1209",
+      "\u121d/\u121d",
+      "\u1270\u1215\u1233"
+    ],
+    "fullDate": "EEEE\u1361 dd MMMM \u130d\u122d\u130b y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "byn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-ad.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-ad.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-ad.js
new file mode 100644
index 0000000..1224828
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-ad.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "diumenge",
+      "dilluns",
+      "dimarts",
+      "dimecres",
+      "dijous",
+      "divendres",
+      "dissabte"
+    ],
+    "ERANAMES": [
+      "abans de Crist",
+      "despr\u00e9s de Crist"
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de gener",
+      "de febrer",
+      "de mar\u00e7",
+      "d\u2019abril",
+      "de maig",
+      "de juny",
+      "de juliol",
+      "d\u2019agost",
+      "de setembre",
+      "d\u2019octubre",
+      "de novembre",
+      "de desembre"
+    ],
+    "SHORTDAY": [
+      "dg.",
+      "dl.",
+      "dt.",
+      "dc.",
+      "dj.",
+      "dv.",
+      "ds."
+    ],
+    "SHORTMONTH": [
+      "gen.",
+      "febr.",
+      "mar\u00e7",
+      "abr.",
+      "maig",
+      "juny",
+      "jul.",
+      "ag.",
+      "set.",
+      "oct.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "gener",
+      "febrer",
+      "mar\u00e7",
+      "abril",
+      "maig",
+      "juny",
+      "juliol",
+      "agost",
+      "setembre",
+      "octubre",
+      "novembre",
+      "desembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ca-ad",
+  "localeID": "ca_AD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es-valencia.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es-valencia.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es-valencia.js
new file mode 100644
index 0000000..388980e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es-valencia.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "diumenge",
+      "dilluns",
+      "dimarts",
+      "dimecres",
+      "dijous",
+      "divendres",
+      "dissabte"
+    ],
+    "ERANAMES": [
+      "abans de Crist",
+      "despr\u00e9s de Crist"
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de gener",
+      "de febrer",
+      "de mar\u00e7",
+      "d\u2019abril",
+      "de maig",
+      "de juny",
+      "de juliol",
+      "d\u2019agost",
+      "de setembre",
+      "d\u2019octubre",
+      "de novembre",
+      "de desembre"
+    ],
+    "SHORTDAY": [
+      "dg.",
+      "dl.",
+      "dt.",
+      "dc.",
+      "dj.",
+      "dv.",
+      "ds."
+    ],
+    "SHORTMONTH": [
+      "gen.",
+      "febr.",
+      "mar\u00e7",
+      "abr.",
+      "maig",
+      "juny",
+      "jul.",
+      "ag.",
+      "set.",
+      "oct.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "gener",
+      "febrer",
+      "mar\u00e7",
+      "abril",
+      "maig",
+      "juny",
+      "juliol",
+      "agost",
+      "setembre",
+      "octubre",
+      "novembre",
+      "desembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ca-es-valencia",
+  "localeID": "ca_ES_VALENCIA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es.js
new file mode 100644
index 0000000..85a01a6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-es.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "diumenge",
+      "dilluns",
+      "dimarts",
+      "dimecres",
+      "dijous",
+      "divendres",
+      "dissabte"
+    ],
+    "ERANAMES": [
+      "abans de Crist",
+      "despr\u00e9s de Crist"
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de gener",
+      "de febrer",
+      "de mar\u00e7",
+      "d\u2019abril",
+      "de maig",
+      "de juny",
+      "de juliol",
+      "d\u2019agost",
+      "de setembre",
+      "d\u2019octubre",
+      "de novembre",
+      "de desembre"
+    ],
+    "SHORTDAY": [
+      "dg.",
+      "dl.",
+      "dt.",
+      "dc.",
+      "dj.",
+      "dv.",
+      "ds."
+    ],
+    "SHORTMONTH": [
+      "gen.",
+      "febr.",
+      "mar\u00e7",
+      "abr.",
+      "maig",
+      "juny",
+      "jul.",
+      "ag.",
+      "set.",
+      "oct.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "gener",
+      "febrer",
+      "mar\u00e7",
+      "abril",
+      "maig",
+      "juny",
+      "juliol",
+      "agost",
+      "setembre",
+      "octubre",
+      "novembre",
+      "desembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ca-es",
+  "localeID": "ca_ES",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-fr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-fr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-fr.js
new file mode 100644
index 0000000..d7b15e6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-fr.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "diumenge",
+      "dilluns",
+      "dimarts",
+      "dimecres",
+      "dijous",
+      "divendres",
+      "dissabte"
+    ],
+    "ERANAMES": [
+      "abans de Crist",
+      "despr\u00e9s de Crist"
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de gener",
+      "de febrer",
+      "de mar\u00e7",
+      "d\u2019abril",
+      "de maig",
+      "de juny",
+      "de juliol",
+      "d\u2019agost",
+      "de setembre",
+      "d\u2019octubre",
+      "de novembre",
+      "de desembre"
+    ],
+    "SHORTDAY": [
+      "dg.",
+      "dl.",
+      "dt.",
+      "dc.",
+      "dj.",
+      "dv.",
+      "ds."
+    ],
+    "SHORTMONTH": [
+      "gen.",
+      "febr.",
+      "mar\u00e7",
+      "abr.",
+      "maig",
+      "juny",
+      "jul.",
+      "ag.",
+      "set.",
+      "oct.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "gener",
+      "febrer",
+      "mar\u00e7",
+      "abril",
+      "maig",
+      "juny",
+      "juliol",
+      "agost",
+      "setembre",
+      "octubre",
+      "novembre",
+      "desembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ca-fr",
+  "localeID": "ca_FR",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-it.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-it.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-it.js
new file mode 100644
index 0000000..72cb384
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca-it.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "diumenge",
+      "dilluns",
+      "dimarts",
+      "dimecres",
+      "dijous",
+      "divendres",
+      "dissabte"
+    ],
+    "ERANAMES": [
+      "abans de Crist",
+      "despr\u00e9s de Crist"
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de gener",
+      "de febrer",
+      "de mar\u00e7",
+      "d\u2019abril",
+      "de maig",
+      "de juny",
+      "de juliol",
+      "d\u2019agost",
+      "de setembre",
+      "d\u2019octubre",
+      "de novembre",
+      "de desembre"
+    ],
+    "SHORTDAY": [
+      "dg.",
+      "dl.",
+      "dt.",
+      "dc.",
+      "dj.",
+      "dv.",
+      "ds."
+    ],
+    "SHORTMONTH": [
+      "gen.",
+      "febr.",
+      "mar\u00e7",
+      "abr.",
+      "maig",
+      "juny",
+      "jul.",
+      "ag.",
+      "set.",
+      "oct.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "gener",
+      "febrer",
+      "mar\u00e7",
+      "abril",
+      "maig",
+      "juny",
+      "juliol",
+      "agost",
+      "setembre",
+      "octubre",
+      "novembre",
+      "desembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ca-it",
+  "localeID": "ca_IT",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca.js
new file mode 100644
index 0000000..2fcc4af
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ca.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a. m.",
+      "p. m."
+    ],
+    "DAY": [
+      "diumenge",
+      "dilluns",
+      "dimarts",
+      "dimecres",
+      "dijous",
+      "divendres",
+      "dissabte"
+    ],
+    "ERANAMES": [
+      "abans de Crist",
+      "despr\u00e9s de Crist"
+    ],
+    "ERAS": [
+      "aC",
+      "dC"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "de gener",
+      "de febrer",
+      "de mar\u00e7",
+      "d\u2019abril",
+      "de maig",
+      "de juny",
+      "de juliol",
+      "d\u2019agost",
+      "de setembre",
+      "d\u2019octubre",
+      "de novembre",
+      "de desembre"
+    ],
+    "SHORTDAY": [
+      "dg.",
+      "dl.",
+      "dt.",
+      "dc.",
+      "dj.",
+      "dv.",
+      "ds."
+    ],
+    "SHORTMONTH": [
+      "gen.",
+      "febr.",
+      "mar\u00e7",
+      "abr.",
+      "maig",
+      "juny",
+      "jul.",
+      "ag.",
+      "set.",
+      "oct.",
+      "nov.",
+      "des."
+    ],
+    "STANDALONEMONTH": [
+      "gener",
+      "febrer",
+      "mar\u00e7",
+      "abril",
+      "maig",
+      "juny",
+      "juliol",
+      "agost",
+      "setembre",
+      "octubre",
+      "novembre",
+      "desembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM 'de' y",
+    "longDate": "d MMMM 'de' y",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d/M/yy H:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ca",
+  "localeID": "ca",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg-ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg-ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg-ug.js
new file mode 100644
index 0000000..ce47a8d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg-ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sande",
+      "Orwokubanza",
+      "Orwakabiri",
+      "Orwakashatu",
+      "Orwakana",
+      "Orwakataano",
+      "Orwamukaaga"
+    ],
+    "ERANAMES": [
+      "Kurisito Atakaijire",
+      "Kurisito Yaijire"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "SHORTDAY": [
+      "SAN",
+      "ORK",
+      "OKB",
+      "OKS",
+      "OKN",
+      "OKT",
+      "OMK"
+    ],
+    "SHORTMONTH": [
+      "KBZ",
+      "KBR",
+      "KST",
+      "KKN",
+      "KTN",
+      "KMK",
+      "KMS",
+      "KMN",
+      "KMW",
+      "KKM",
+      "KNK",
+      "KNB"
+    ],
+    "STANDALONEMONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "cgg-ug",
+  "localeID": "cgg_UG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg.js
new file mode 100644
index 0000000..86e8630
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_cgg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sande",
+      "Orwokubanza",
+      "Orwakabiri",
+      "Orwakashatu",
+      "Orwakana",
+      "Orwakataano",
+      "Orwamukaaga"
+    ],
+    "ERANAMES": [
+      "Kurisito Atakaijire",
+      "Kurisito Yaijire"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "SHORTDAY": [
+      "SAN",
+      "ORK",
+      "OKB",
+      "OKS",
+      "OKN",
+      "OKT",
+      "OMK"
+    ],
+    "SHORTMONTH": [
+      "KBZ",
+      "KBR",
+      "KST",
+      "KKN",
+      "KTN",
+      "KMK",
+      "KMS",
+      "KMN",
+      "KMW",
+      "KKM",
+      "KNK",
+      "KNB"
+    ],
+    "STANDALONEMONTH": [
+      "Okwokubanza",
+      "Okwakabiri",
+      "Okwakashatu",
+      "Okwakana",
+      "Okwakataana",
+      "Okwamukaaga",
+      "Okwamushanju",
+      "Okwamunaana",
+      "Okwamwenda",
+      "Okwaikumi",
+      "Okwaikumi na kumwe",
+      "Okwaikumi na ibiri"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "cgg",
+  "localeID": "cgg",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr-us.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr-us.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr-us.js
new file mode 100644
index 0000000..1445824
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr-us.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u13cc\u13be\u13b4",
+      "\u13d2\u13af\u13f1\u13a2\u13d7\u13e2"
+    ],
+    "DAY": [
+      "\u13a4\u13be\u13d9\u13d3\u13c6\u13cd\u13ac",
+      "\u13a4\u13be\u13d9\u13d3\u13c9\u13c5\u13af",
+      "\u13d4\u13b5\u13c1\u13a2\u13a6",
+      "\u13e6\u13a2\u13c1\u13a2\u13a6",
+      "\u13c5\u13a9\u13c1\u13a2\u13a6",
+      "\u13e7\u13be\u13a9\u13b6\u13cd\u13d7",
+      "\u13a4\u13be\u13d9\u13d3\u13c8\u13d5\u13be"
+    ],
+    "ERANAMES": [
+      "\u13cf \u13e5\u13cc \u13be\u13d5\u13b2\u13cd\u13ac\u13be",
+      "\u13a0\u13a9\u13c3\u13ae\u13b5\u13d3\u13cd\u13d7\u13f1 \u13a0\u13d5\u13d8\u13f1\u13cd\u13ac \u13f1\u13b0\u13e9 \u13e7\u13d3\u13c2\u13b8\u13a2\u13cd\u13d7"
+    ],
+    "ERAS": [
+      "\u13a4\u13d3\u13b7\u13b8",
+      "\u13a4\u13b6\u13d0\u13c5"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u13a4\u13c3\u13b8\u13d4\u13c5",
+      "\u13a7\u13a6\u13b5",
+      "\u13a0\u13c5\u13f1",
+      "\u13a7\u13ec\u13c2",
+      "\u13a0\u13c2\u13cd\u13ac\u13d8",
+      "\u13d5\u13ad\u13b7\u13f1",
+      "\u13ab\u13f0\u13c9\u13c2",
+      "\u13a6\u13b6\u13c2",
+      "\u13da\u13b5\u13cd\u13d7",
+      "\u13da\u13c2\u13c5\u13d7",
+      "\u13c5\u13d3\u13d5\u13c6",
+      "\u13a5\u13cd\u13a9\u13f1"
+    ],
+    "SHORTDAY": [
+      "\u13c6\u13cd\u13ac",
+      "\u13c9\u13c5\u13af",
+      "\u13d4\u13b5\u13c1",
+      "\u13e6\u13a2\u13c1",
+      "\u13c5\u13a9\u13c1",
+      "\u13e7\u13be\u13a9",
+      "\u13c8\u13d5\u13be"
+    ],
+    "SHORTMONTH": [
+      "\u13a4\u13c3",
+      "\u13a7\u13a6",
+      "\u13a0\u13c5",
+      "\u13a7\u13ec",
+      "\u13a0\u13c2",
+      "\u13d5\u13ad",
+      "\u13ab\u13f0",
+      "\u13a6\u13b6",
+      "\u13da\u13b5",
+      "\u13da\u13c2",
+      "\u13c5\u13d3",
+      "\u13a5\u13cd"
+    ],
+    "STANDALONEMONTH": [
+      "\u13a4\u13c3\u13b8\u13d4\u13c5",
+      "\u13a7\u13a6\u13b5",
+      "\u13a0\u13c5\u13f1",
+      "\u13a7\u13ec\u13c2",
+      "\u13a0\u13c2\u13cd\u13ac\u13d8",
+      "\u13d5\u13ad\u13b7\u13f1",
+      "\u13ab\u13f0\u13c9\u13c2",
+      "\u13a6\u13b6\u13c2",
+      "\u13da\u13b5\u13cd\u13d7",
+      "\u13da\u13c2\u13c5\u13d7",
+      "\u13c5\u13d3\u13d5\u13c6",
+      "\u13a5\u13cd\u13a9\u13f1"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "chr-us",
+  "localeID": "chr_US",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr.js
new file mode 100644
index 0000000..61030c4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_chr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u13cc\u13be\u13b4",
+      "\u13d2\u13af\u13f1\u13a2\u13d7\u13e2"
+    ],
+    "DAY": [
+      "\u13a4\u13be\u13d9\u13d3\u13c6\u13cd\u13ac",
+      "\u13a4\u13be\u13d9\u13d3\u13c9\u13c5\u13af",
+      "\u13d4\u13b5\u13c1\u13a2\u13a6",
+      "\u13e6\u13a2\u13c1\u13a2\u13a6",
+      "\u13c5\u13a9\u13c1\u13a2\u13a6",
+      "\u13e7\u13be\u13a9\u13b6\u13cd\u13d7",
+      "\u13a4\u13be\u13d9\u13d3\u13c8\u13d5\u13be"
+    ],
+    "ERANAMES": [
+      "\u13cf \u13e5\u13cc \u13be\u13d5\u13b2\u13cd\u13ac\u13be",
+      "\u13a0\u13a9\u13c3\u13ae\u13b5\u13d3\u13cd\u13d7\u13f1 \u13a0\u13d5\u13d8\u13f1\u13cd\u13ac \u13f1\u13b0\u13e9 \u13e7\u13d3\u13c2\u13b8\u13a2\u13cd\u13d7"
+    ],
+    "ERAS": [
+      "\u13a4\u13d3\u13b7\u13b8",
+      "\u13a4\u13b6\u13d0\u13c5"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u13a4\u13c3\u13b8\u13d4\u13c5",
+      "\u13a7\u13a6\u13b5",
+      "\u13a0\u13c5\u13f1",
+      "\u13a7\u13ec\u13c2",
+      "\u13a0\u13c2\u13cd\u13ac\u13d8",
+      "\u13d5\u13ad\u13b7\u13f1",
+      "\u13ab\u13f0\u13c9\u13c2",
+      "\u13a6\u13b6\u13c2",
+      "\u13da\u13b5\u13cd\u13d7",
+      "\u13da\u13c2\u13c5\u13d7",
+      "\u13c5\u13d3\u13d5\u13c6",
+      "\u13a5\u13cd\u13a9\u13f1"
+    ],
+    "SHORTDAY": [
+      "\u13c6\u13cd\u13ac",
+      "\u13c9\u13c5\u13af",
+      "\u13d4\u13b5\u13c1",
+      "\u13e6\u13a2\u13c1",
+      "\u13c5\u13a9\u13c1",
+      "\u13e7\u13be\u13a9",
+      "\u13c8\u13d5\u13be"
+    ],
+    "SHORTMONTH": [
+      "\u13a4\u13c3",
+      "\u13a7\u13a6",
+      "\u13a0\u13c5",
+      "\u13a7\u13ec",
+      "\u13a0\u13c2",
+      "\u13d5\u13ad",
+      "\u13ab\u13f0",
+      "\u13a6\u13b6",
+      "\u13da\u13b5",
+      "\u13da\u13c2",
+      "\u13c5\u13d3",
+      "\u13a5\u13cd"
+    ],
+    "STANDALONEMONTH": [
+      "\u13a4\u13c3\u13b8\u13d4\u13c5",
+      "\u13a7\u13a6\u13b5",
+      "\u13a0\u13c5\u13f1",
+      "\u13a7\u13ec\u13c2",
+      "\u13a0\u13c2\u13cd\u13ac\u13d8",
+      "\u13d5\u13ad\u13b7\u13f1",
+      "\u13ab\u13f0\u13c9\u13c2",
+      "\u13a6\u13b6\u13c2",
+      "\u13da\u13b5\u13cd\u13d7",
+      "\u13da\u13c2\u13c5\u13d7",
+      "\u13c5\u13d3\u13d5\u13c6",
+      "\u13a5\u13cd\u13a9\u13f1"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "chr",
+  "localeID": "chr",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-iq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-iq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-iq.js
new file mode 100644
index 0000000..bc6cf63
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ckb-arab-iq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0628.\u0646",
+      "\u062f.\u0646"
+    ],
+    "DAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "ERANAMES": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u0646",
+      "\u0632\u0627\u06cc\u06cc\u0646\u06cc"
+    ],
+    "ERAS": [
+      "\u067e\u06ce\u0634 \u0632\u0627\u06cc\u06cc\u06cc\u0646",
+      "\u0632"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06d5\u06a9\u0634\u06d5\u0645\u0645\u06d5",
+      "\u062f\u0648\u0648\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0633\u06ce\u0634\u06d5\u0645\u0645\u06d5",
+      "\u0686\u0648\u0627\u0631\u0634\u06d5\u0645\u0645\u06d5",
+      "\u067e\u06ce\u0646\u062c\u0634\u06d5\u0645\u0645\u06d5",
+      "\u06be\u06d5\u06cc\u0646\u06cc",
+      "\u0634\u06d5\u0645\u0645\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "STANDALONEMONTH": [
+      "\u06a9\u0627\u0646\u0648\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u0634\u0648\u0628\u0627\u062a",
+      "\u0626\u0627\u0632\u0627\u0631",
+      "\u0646\u06cc\u0633\u0627\u0646",
+      "\u0626\u0627\u06cc\u0627\u0631",
+      "\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646",
+      "\u062a\u06d5\u0645\u0648\u0648\u0632",
+      "\u0626\u0627\u0628",
+      "\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645",
+      "\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645",
+      "\u06a9\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "d\u06cc MMMM\u06cc y",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ckb-arab-iq",
+  "localeID": "ckb_Arab_IQ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[20/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl-es.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl-es.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl-es.js
new file mode 100644
index 0000000..9c68a40
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl-es.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "domingo",
+      "luns",
+      "martes",
+      "m\u00e9rcores",
+      "xoves",
+      "venres",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "xaneiro",
+      "febreiro",
+      "marzo",
+      "abril",
+      "maio",
+      "xu\u00f1o",
+      "xullo",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "decembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "m\u00e9r",
+      "xov",
+      "ven",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "xan",
+      "feb",
+      "mar",
+      "abr",
+      "mai",
+      "xu\u00f1",
+      "xul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "Xaneiro",
+      "Febreiro",
+      "Marzo",
+      "Abril",
+      "Maio",
+      "Xu\u00f1o",
+      "Xullo",
+      "Agosto",
+      "Setembro",
+      "Outubro",
+      "Novembro",
+      "Decembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gl-es",
+  "localeID": "gl_ES",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl.js
new file mode 100644
index 0000000..966ef01
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "domingo",
+      "luns",
+      "martes",
+      "m\u00e9rcores",
+      "xoves",
+      "venres",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "despois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "xaneiro",
+      "febreiro",
+      "marzo",
+      "abril",
+      "maio",
+      "xu\u00f1o",
+      "xullo",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "decembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "lun",
+      "mar",
+      "m\u00e9r",
+      "xov",
+      "ven",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "xan",
+      "feb",
+      "mar",
+      "abr",
+      "mai",
+      "xu\u00f1",
+      "xul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "Xaneiro",
+      "Febreiro",
+      "Marzo",
+      "Abril",
+      "Maio",
+      "Xu\u00f1o",
+      "Xullo",
+      "Agosto",
+      "Setembro",
+      "Outubro",
+      "Novembro",
+      "Decembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gl",
+  "localeID": "gl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-ch.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-ch.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-ch.js
new file mode 100644
index 0000000..bc494c8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-ch.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nam."
+    ],
+    "DAY": [
+      "Sunntig",
+      "M\u00e4\u00e4ntig",
+      "Ziischtig",
+      "Mittwuch",
+      "Dunschtig",
+      "Friitig",
+      "Samschtig"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "SHORTDAY": [
+      "Su.",
+      "M\u00e4.",
+      "Zi.",
+      "Mi.",
+      "Du.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "M\u00e4r",
+      "Apr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dez"
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "gsw-ch",
+  "localeID": "gsw_CH",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-fr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-fr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-fr.js
new file mode 100644
index 0000000..253ae29
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-fr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nam."
+    ],
+    "DAY": [
+      "Sunntig",
+      "M\u00e4\u00e4ntig",
+      "Ziischtig",
+      "Mittwuch",
+      "Dunschtig",
+      "Friitig",
+      "Samschtig"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "SHORTDAY": [
+      "Su.",
+      "M\u00e4.",
+      "Zi.",
+      "Mi.",
+      "Du.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "M\u00e4r",
+      "Apr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dez"
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "gsw-fr",
+  "localeID": "gsw_FR",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-li.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-li.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-li.js
new file mode 100644
index 0000000..615fafd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw-li.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nam."
+    ],
+    "DAY": [
+      "Sunntig",
+      "M\u00e4\u00e4ntig",
+      "Ziischtig",
+      "Mittwuch",
+      "Dunschtig",
+      "Friitig",
+      "Samschtig"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "SHORTDAY": [
+      "Su.",
+      "M\u00e4.",
+      "Zi.",
+      "Mi.",
+      "Du.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "M\u00e4r",
+      "Apr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dez"
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "gsw-li",
+  "localeID": "gsw_LI",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw.js
new file mode 100644
index 0000000..13c517d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gsw.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "vorm.",
+      "nam."
+    ],
+    "DAY": [
+      "Sunntig",
+      "M\u00e4\u00e4ntig",
+      "Ziischtig",
+      "Mittwuch",
+      "Dunschtig",
+      "Friitig",
+      "Samschtig"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "SHORTDAY": [
+      "Su.",
+      "M\u00e4.",
+      "Zi.",
+      "Mi.",
+      "Du.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "M\u00e4r",
+      "Apr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dez"
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4rz",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "Auguscht",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CHF",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u2019",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "gsw",
+  "localeID": "gsw",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu-in.js
new file mode 100644
index 0000000..ecc7a44
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0",
+      "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0",
+      "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0",
+      "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0",
+      "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0",
+      "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0",
+      "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"
+    ],
+    "ERANAMES": [
+      "\u0a88\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8 \u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u0ac7",
+      "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8"
+    ],
+    "ERAS": [
+      "\u0a88\u0ab8\u0ac1\u0aa8\u0abe \u0a9c\u0aa8\u0acd\u0aae \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",
+      "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+      "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+      "\u0aae\u0ac7",
+      "\u0a9c\u0ac2\u0aa8",
+      "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+      "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+      "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0",
+      "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"
+    ],
+    "SHORTDAY": [
+      "\u0ab0\u0ab5\u0abf",
+      "\u0ab8\u0acb\u0aae",
+      "\u0aae\u0a82\u0a97\u0ab3",
+      "\u0aac\u0ac1\u0aa7",
+      "\u0a97\u0ac1\u0ab0\u0ac1",
+      "\u0ab6\u0ac1\u0a95\u0acd\u0ab0",
+      "\u0ab6\u0aa8\u0abf"
+    ],
+    "SHORTMONTH": [
+      "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1",
+      "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1",
+      "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+      "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+      "\u0aae\u0ac7",
+      "\u0a9c\u0ac2\u0aa8",
+      "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+      "\u0a91\u0a97",
+      "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7",
+      "\u0a91\u0a95\u0acd\u0a9f\u0acb",
+      "\u0aa8\u0ab5\u0ac7",
+      "\u0aa1\u0abf\u0ab8\u0ac7"
+    ],
+    "STANDALONEMONTH": [
+      "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+      "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+      "\u0aae\u0ac7",
+      "\u0a9c\u0ac2\u0aa8",
+      "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+      "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+      "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0",
+      "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y hh:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "hh:mm:ss a",
+    "short": "d/M/yy hh:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gu-in",
+  "localeID": "gu_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu.js
new file mode 100644
index 0000000..3804acd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gu.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0",
+      "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0",
+      "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0",
+      "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0",
+      "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0",
+      "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0",
+      "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"
+    ],
+    "ERANAMES": [
+      "\u0a88\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8 \u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u0ac7",
+      "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8"
+    ],
+    "ERAS": [
+      "\u0a88\u0ab8\u0ac1\u0aa8\u0abe \u0a9c\u0aa8\u0acd\u0aae \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",
+      "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+      "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+      "\u0aae\u0ac7",
+      "\u0a9c\u0ac2\u0aa8",
+      "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+      "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+      "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0",
+      "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"
+    ],
+    "SHORTDAY": [
+      "\u0ab0\u0ab5\u0abf",
+      "\u0ab8\u0acb\u0aae",
+      "\u0aae\u0a82\u0a97\u0ab3",
+      "\u0aac\u0ac1\u0aa7",
+      "\u0a97\u0ac1\u0ab0\u0ac1",
+      "\u0ab6\u0ac1\u0a95\u0acd\u0ab0",
+      "\u0ab6\u0aa8\u0abf"
+    ],
+    "SHORTMONTH": [
+      "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1",
+      "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1",
+      "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+      "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+      "\u0aae\u0ac7",
+      "\u0a9c\u0ac2\u0aa8",
+      "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+      "\u0a91\u0a97",
+      "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7",
+      "\u0a91\u0a95\u0acd\u0a9f\u0acb",
+      "\u0aa8\u0ab5\u0ac7",
+      "\u0aa1\u0abf\u0ab8\u0ac7"
+    ],
+    "STANDALONEMONTH": [
+      "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0",
+      "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+      "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+      "\u0aae\u0ac7",
+      "\u0a9c\u0ac2\u0aa8",
+      "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+      "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+      "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0",
+      "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+      "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y hh:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "hh:mm:ss a",
+    "short": "d/M/yy hh:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "hh:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gu",
+  "localeID": "gu",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz-ke.js
new file mode 100644
index 0000000..67ed8c6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Ma/Mo",
+      "Mambia/Mog"
+    ],
+    "DAY": [
+      "Chumapiri",
+      "Chumatato",
+      "Chumaine",
+      "Chumatano",
+      "Aramisi",
+      "Ichuma",
+      "Esabato"
+    ],
+    "ERANAMES": [
+      "Yeso ataiborwa",
+      "Yeso kaiboirwe"
+    ],
+    "ERAS": [
+      "YA",
+      "YK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Chanuari",
+      "Feburari",
+      "Machi",
+      "Apiriri",
+      "Mei",
+      "Juni",
+      "Chulai",
+      "Agosti",
+      "Septemba",
+      "Okitoba",
+      "Nobemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Cpr",
+      "Ctt",
+      "Cmn",
+      "Cmt",
+      "Ars",
+      "Icm",
+      "Est"
+    ],
+    "SHORTMONTH": [
+      "Can",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Cul",
+      "Agt",
+      "Sep",
+      "Okt",
+      "Nob",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Chanuari",
+      "Feburari",
+      "Machi",
+      "Apiriri",
+      "Mei",
+      "Juni",
+      "Chulai",
+      "Agosti",
+      "Septemba",
+      "Okitoba",
+      "Nobemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "guz-ke",
+  "localeID": "guz_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz.js
new file mode 100644
index 0000000..8c2b1e6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_guz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Ma/Mo",
+      "Mambia/Mog"
+    ],
+    "DAY": [
+      "Chumapiri",
+      "Chumatato",
+      "Chumaine",
+      "Chumatano",
+      "Aramisi",
+      "Ichuma",
+      "Esabato"
+    ],
+    "ERANAMES": [
+      "Yeso ataiborwa",
+      "Yeso kaiboirwe"
+    ],
+    "ERAS": [
+      "YA",
+      "YK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Chanuari",
+      "Feburari",
+      "Machi",
+      "Apiriri",
+      "Mei",
+      "Juni",
+      "Chulai",
+      "Agosti",
+      "Septemba",
+      "Okitoba",
+      "Nobemba",
+      "Disemba"
+    ],
+    "SHORTDAY": [
+      "Cpr",
+      "Ctt",
+      "Cmn",
+      "Cmt",
+      "Ars",
+      "Icm",
+      "Est"
+    ],
+    "SHORTMONTH": [
+      "Can",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Cul",
+      "Agt",
+      "Sep",
+      "Okt",
+      "Nob",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Chanuari",
+      "Feburari",
+      "Machi",
+      "Apiriri",
+      "Mei",
+      "Juni",
+      "Chulai",
+      "Agosti",
+      "Septemba",
+      "Okitoba",
+      "Nobemba",
+      "Disemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "guz",
+  "localeID": "guz",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv-im.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv-im.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv-im.js
new file mode 100644
index 0000000..9c38f7a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv-im.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Jedoonee",
+      "Jelhein",
+      "Jemayrt",
+      "Jercean",
+      "Jerdein",
+      "Jeheiney",
+      "Jesarn"
+    ],
+    "ERANAMES": [
+      "RC",
+      "AD"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jerrey-geuree",
+      "Toshiaght-arree",
+      "Mayrnt",
+      "Averil",
+      "Boaldyn",
+      "Mean-souree",
+      "Jerrey-souree",
+      "Luanistyn",
+      "Mean-fouyir",
+      "Jerrey-fouyir",
+      "Mee Houney",
+      "Mee ny Nollick"
+    ],
+    "SHORTDAY": [
+      "Jed",
+      "Jel",
+      "Jem",
+      "Jerc",
+      "Jerd",
+      "Jeh",
+      "Jes"
+    ],
+    "SHORTMONTH": [
+      "J-guer",
+      "T-arree",
+      "Mayrnt",
+      "Avrril",
+      "Boaldyn",
+      "M-souree",
+      "J-souree",
+      "Luanistyn",
+      "M-fouyir",
+      "J-fouyir",
+      "M.Houney",
+      "M.Nollick"
+    ],
+    "STANDALONEMONTH": [
+      "Jerrey-geuree",
+      "Toshiaght-arree",
+      "Mayrnt",
+      "Averil",
+      "Boaldyn",
+      "Mean-souree",
+      "Jerrey-souree",
+      "Luanistyn",
+      "Mean-fouyir",
+      "Jerrey-fouyir",
+      "Mee Houney",
+      "Mee ny Nollick"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "MMM dd, y HH:mm:ss",
+    "mediumDate": "MMM dd, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gv-im",
+  "localeID": "gv_IM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv.js
new file mode 100644
index 0000000..fefc641
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_gv.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "Jedoonee",
+      "Jelhein",
+      "Jemayrt",
+      "Jercean",
+      "Jerdein",
+      "Jeheiney",
+      "Jesarn"
+    ],
+    "ERANAMES": [
+      "RC",
+      "AD"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jerrey-geuree",
+      "Toshiaght-arree",
+      "Mayrnt",
+      "Averil",
+      "Boaldyn",
+      "Mean-souree",
+      "Jerrey-souree",
+      "Luanistyn",
+      "Mean-fouyir",
+      "Jerrey-fouyir",
+      "Mee Houney",
+      "Mee ny Nollick"
+    ],
+    "SHORTDAY": [
+      "Jed",
+      "Jel",
+      "Jem",
+      "Jerc",
+      "Jerd",
+      "Jeh",
+      "Jes"
+    ],
+    "SHORTMONTH": [
+      "J-guer",
+      "T-arree",
+      "Mayrnt",
+      "Avrril",
+      "Boaldyn",
+      "M-souree",
+      "J-souree",
+      "Luanistyn",
+      "M-fouyir",
+      "J-fouyir",
+      "M.Houney",
+      "M.Nollick"
+    ],
+    "STANDALONEMONTH": [
+      "Jerrey-geuree",
+      "Toshiaght-arree",
+      "Mayrnt",
+      "Averil",
+      "Boaldyn",
+      "Mean-souree",
+      "Jerrey-souree",
+      "Luanistyn",
+      "Mean-fouyir",
+      "Jerrey-fouyir",
+      "Mee Houney",
+      "Mee ny Nollick"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE dd MMMM y",
+    "longDate": "dd MMMM y",
+    "medium": "MMM dd, y HH:mm:ss",
+    "mediumDate": "MMM dd, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "gv",
+  "localeID": "gv",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-gh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-gh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-gh.js
new file mode 100644
index 0000000..61edae7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-gh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lahadi",
+      "Litinin",
+      "Talata",
+      "Laraba",
+      "Alhamis",
+      "Jumma\u02bca",
+      "Asabar"
+    ],
+    "ERANAMES": [
+      "Kafin haihuwar annab",
+      "Bayan haihuwar annab"
+    ],
+    "ERAS": [
+      "KHAI",
+      "BHAI"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "SHORTDAY": [
+      "Lh",
+      "Li",
+      "Ta",
+      "Lr",
+      "Al",
+      "Ju",
+      "As"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fab",
+      "Mar",
+      "Afi",
+      "May",
+      "Yun",
+      "Yul",
+      "Agu",
+      "Sat",
+      "Okt",
+      "Nuw",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GHS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ha-latn-gh",
+  "localeID": "ha_Latn_GH",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ne.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ne.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ne.js
new file mode 100644
index 0000000..05debb8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ne.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lahadi",
+      "Litinin",
+      "Talata",
+      "Laraba",
+      "Alhamis",
+      "Jumma\u02bca",
+      "Asabar"
+    ],
+    "ERANAMES": [
+      "Kafin haihuwar annab",
+      "Bayan haihuwar annab"
+    ],
+    "ERAS": [
+      "KHAI",
+      "BHAI"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "SHORTDAY": [
+      "Lh",
+      "Li",
+      "Ta",
+      "Lr",
+      "Al",
+      "Ju",
+      "As"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fab",
+      "Mar",
+      "Afi",
+      "May",
+      "Yun",
+      "Yul",
+      "Agu",
+      "Sat",
+      "Okt",
+      "Nuw",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ha-latn-ne",
+  "localeID": "ha_Latn_NE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ng.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ng.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ng.js
new file mode 100644
index 0000000..2839708
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn-ng.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lahadi",
+      "Litinin",
+      "Talata",
+      "Laraba",
+      "Alhamis",
+      "Jumma\u02bca",
+      "Asabar"
+    ],
+    "ERANAMES": [
+      "Kafin haihuwar annab",
+      "Bayan haihuwar annab"
+    ],
+    "ERAS": [
+      "KHAI",
+      "BHAI"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "SHORTDAY": [
+      "Lh",
+      "Li",
+      "Ta",
+      "Lr",
+      "Al",
+      "Ju",
+      "As"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fab",
+      "Mar",
+      "Afi",
+      "May",
+      "Yun",
+      "Yul",
+      "Agu",
+      "Sat",
+      "Okt",
+      "Nuw",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ha-latn-ng",
+  "localeID": "ha_Latn_NG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn.js
new file mode 100644
index 0000000..92666a2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lahadi",
+      "Litinin",
+      "Talata",
+      "Laraba",
+      "Alhamis",
+      "Jumma\u02bca",
+      "Asabar"
+    ],
+    "ERANAMES": [
+      "Kafin haihuwar annab",
+      "Bayan haihuwar annab"
+    ],
+    "ERAS": [
+      "KHAI",
+      "BHAI"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "SHORTDAY": [
+      "Lh",
+      "Li",
+      "Ta",
+      "Lr",
+      "Al",
+      "Ju",
+      "As"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fab",
+      "Mar",
+      "Afi",
+      "May",
+      "Yun",
+      "Yul",
+      "Agu",
+      "Sat",
+      "Okt",
+      "Nuw",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ha-latn",
+  "localeID": "ha_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha.js
new file mode 100644
index 0000000..1550a07
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ha.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Lahadi",
+      "Litinin",
+      "Talata",
+      "Laraba",
+      "Alhamis",
+      "Jumma\u02bca",
+      "Asabar"
+    ],
+    "ERANAMES": [
+      "Kafin haihuwar annab",
+      "Bayan haihuwar annab"
+    ],
+    "ERAS": [
+      "KHAI",
+      "BHAI"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "SHORTDAY": [
+      "Lh",
+      "Li",
+      "Ta",
+      "Lr",
+      "Al",
+      "Ju",
+      "As"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Fab",
+      "Mar",
+      "Afi",
+      "May",
+      "Yun",
+      "Yul",
+      "Agu",
+      "Sat",
+      "Okt",
+      "Nuw",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Janairu",
+      "Faburairu",
+      "Maris",
+      "Afirilu",
+      "Mayu",
+      "Yuni",
+      "Yuli",
+      "Agusta",
+      "Satumba",
+      "Oktoba",
+      "Nuwamba",
+      "Disamba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20a6",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ha",
+  "localeID": "ha",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw-us.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw-us.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw-us.js
new file mode 100644
index 0000000..2dab59b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw-us.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "L\u0101pule",
+      "Po\u02bbakahi",
+      "Po\u02bbalua",
+      "Po\u02bbakolu",
+      "Po\u02bbah\u0101",
+      "Po\u02bbalima",
+      "Po\u02bbaono"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ianuali",
+      "Pepeluali",
+      "Malaki",
+      "\u02bbApelila",
+      "Mei",
+      "Iune",
+      "Iulai",
+      "\u02bbAukake",
+      "Kepakemapa",
+      "\u02bbOkakopa",
+      "Nowemapa",
+      "Kekemapa"
+    ],
+    "SHORTDAY": [
+      "LP",
+      "P1",
+      "P2",
+      "P3",
+      "P4",
+      "P5",
+      "P6"
+    ],
+    "SHORTMONTH": [
+      "Ian.",
+      "Pep.",
+      "Mal.",
+      "\u02bbAp.",
+      "Mei",
+      "Iun.",
+      "Iul.",
+      "\u02bbAu.",
+      "Kep.",
+      "\u02bbOk.",
+      "Now.",
+      "Kek."
+    ],
+    "STANDALONEMONTH": [
+      "Ianuali",
+      "Pepeluali",
+      "Malaki",
+      "\u02bbApelila",
+      "Mei",
+      "Iune",
+      "Iulai",
+      "\u02bbAukake",
+      "Kepakemapa",
+      "\u02bbOkakopa",
+      "Nowemapa",
+      "Kekemapa"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "haw-us",
+  "localeID": "haw_US",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw.js
new file mode 100644
index 0000000..c1cd77e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_haw.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "L\u0101pule",
+      "Po\u02bbakahi",
+      "Po\u02bbalua",
+      "Po\u02bbakolu",
+      "Po\u02bbah\u0101",
+      "Po\u02bbalima",
+      "Po\u02bbaono"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ianuali",
+      "Pepeluali",
+      "Malaki",
+      "\u02bbApelila",
+      "Mei",
+      "Iune",
+      "Iulai",
+      "\u02bbAukake",
+      "Kepakemapa",
+      "\u02bbOkakopa",
+      "Nowemapa",
+      "Kekemapa"
+    ],
+    "SHORTDAY": [
+      "LP",
+      "P1",
+      "P2",
+      "P3",
+      "P4",
+      "P5",
+      "P6"
+    ],
+    "SHORTMONTH": [
+      "Ian.",
+      "Pep.",
+      "Mal.",
+      "\u02bbAp.",
+      "Mei",
+      "Iun.",
+      "Iul.",
+      "\u02bbAu.",
+      "Kep.",
+      "\u02bbOk.",
+      "Now.",
+      "Kek."
+    ],
+    "STANDALONEMONTH": [
+      "Ianuali",
+      "Pepeluali",
+      "Malaki",
+      "\u02bbApelila",
+      "Mei",
+      "Iune",
+      "Iulai",
+      "\u02bbAukake",
+      "Kepakemapa",
+      "\u02bbOkakopa",
+      "Nowemapa",
+      "Kekemapa"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "haw",
+  "localeID": "haw",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he-il.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he-il.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he-il.js
new file mode 100644
index 0000000..df764ad
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he-il.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6",
+      "\u05d0\u05d7\u05d4\u05f4\u05e6"
+    ],
+    "DAY": [
+      "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df",
+      "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
+      "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"
+    ],
+    "ERANAMES": [
+      "\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4",
+      "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"
+    ],
+    "ERAS": [
+      "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1",
+      "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u05d9\u05e0\u05d5\u05d0\u05e8",
+      "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05d9\u05dc",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+      "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+      "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+      "\u05d3\u05e6\u05de\u05d1\u05e8"
+    ],
+    "SHORTDAY": [
+      "\u05d9\u05d5\u05dd \u05d0\u05f3",
+      "\u05d9\u05d5\u05dd \u05d1\u05f3",
+      "\u05d9\u05d5\u05dd \u05d2\u05f3",
+      "\u05d9\u05d5\u05dd \u05d3\u05f3",
+      "\u05d9\u05d5\u05dd \u05d4\u05f3",
+      "\u05d9\u05d5\u05dd \u05d5\u05f3",
+      "\u05e9\u05d1\u05ea"
+    ],
+    "SHORTMONTH": [
+      "\u05d9\u05e0\u05d5\u05f3",
+      "\u05e4\u05d1\u05e8\u05f3",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05f3",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05f3",
+      "\u05e1\u05e4\u05d8\u05f3",
+      "\u05d0\u05d5\u05e7\u05f3",
+      "\u05e0\u05d5\u05d1\u05f3",
+      "\u05d3\u05e6\u05de\u05f3"
+    ],
+    "STANDALONEMONTH": [
+      "\u05d9\u05e0\u05d5\u05d0\u05e8",
+      "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05d9\u05dc",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+      "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+      "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+      "\u05d3\u05e6\u05de\u05d1\u05e8"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE, d \u05d1MMMM y",
+    "longDate": "d \u05d1MMMM y",
+    "medium": "d \u05d1MMM y H:mm:ss",
+    "mediumDate": "d \u05d1MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d.M.y H:mm",
+    "shortDate": "d.M.y",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20aa",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "he-il",
+  "localeID": "he_IL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i == 2 && vf.v == 0) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he.js
new file mode 100644
index 0000000..9978dc7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_he.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6",
+      "\u05d0\u05d7\u05d4\u05f4\u05e6"
+    ],
+    "DAY": [
+      "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df",
+      "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
+      "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9",
+      "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"
+    ],
+    "ERANAMES": [
+      "\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4",
+      "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"
+    ],
+    "ERAS": [
+      "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1",
+      "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u05d9\u05e0\u05d5\u05d0\u05e8",
+      "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05d9\u05dc",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+      "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+      "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+      "\u05d3\u05e6\u05de\u05d1\u05e8"
+    ],
+    "SHORTDAY": [
+      "\u05d9\u05d5\u05dd \u05d0\u05f3",
+      "\u05d9\u05d5\u05dd \u05d1\u05f3",
+      "\u05d9\u05d5\u05dd \u05d2\u05f3",
+      "\u05d9\u05d5\u05dd \u05d3\u05f3",
+      "\u05d9\u05d5\u05dd \u05d4\u05f3",
+      "\u05d9\u05d5\u05dd \u05d5\u05f3",
+      "\u05e9\u05d1\u05ea"
+    ],
+    "SHORTMONTH": [
+      "\u05d9\u05e0\u05d5\u05f3",
+      "\u05e4\u05d1\u05e8\u05f3",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05f3",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05f3",
+      "\u05e1\u05e4\u05d8\u05f3",
+      "\u05d0\u05d5\u05e7\u05f3",
+      "\u05e0\u05d5\u05d1\u05f3",
+      "\u05d3\u05e6\u05de\u05f3"
+    ],
+    "STANDALONEMONTH": [
+      "\u05d9\u05e0\u05d5\u05d0\u05e8",
+      "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+      "\u05de\u05e8\u05e5",
+      "\u05d0\u05e4\u05e8\u05d9\u05dc",
+      "\u05de\u05d0\u05d9",
+      "\u05d9\u05d5\u05e0\u05d9",
+      "\u05d9\u05d5\u05dc\u05d9",
+      "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+      "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+      "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+      "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+      "\u05d3\u05e6\u05de\u05d1\u05e8"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE, d \u05d1MMMM y",
+    "longDate": "d \u05d1MMMM y",
+    "medium": "d \u05d1MMM y H:mm:ss",
+    "mediumDate": "d \u05d1MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "d.M.y H:mm",
+    "shortDate": "d.M.y",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20aa",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "he",
+  "localeID": "he",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i == 2 && vf.v == 0) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && (n < 0 || n > 10) && n % 10 == 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi-in.js
new file mode 100644
index 0000000..f611700
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "\u0930\u0935\u093f\u0935\u093e\u0930",
+      "\u0938\u094b\u092e\u0935\u093e\u0930",
+      "\u092e\u0902\u0917\u0932\u0935\u093e\u0930",
+      "\u092c\u0941\u0927\u0935\u093e\u0930",
+      "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+      "\u0936\u0928\u093f\u0935\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935",
+      "\u0908\u0938\u0935\u0940 \u0938\u0928"
+    ],
+    "ERAS": [
+      "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935",
+      "\u0908\u0938\u094d\u0935\u0940"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u093c\u0930\u0935\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u0948\u0932",
+      "\u092e\u0908",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u0924",
+      "\u0938\u093f\u0924\u0902\u092c\u0930",
+      "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+      "\u0928\u0935\u0902\u092c\u0930",
+      "\u0926\u093f\u0938\u0902\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u0935\u093f",
+      "\u0938\u094b\u092e",
+      "\u092e\u0902\u0917\u0932",
+      "\u092c\u0941\u0927",
+      "\u0917\u0941\u0930\u0941",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u0928\u0970",
+      "\u092b\u093c\u0930\u0970",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u0948\u0932",
+      "\u092e\u0908",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0970",
+      "\u0905\u0917\u0970",
+      "\u0938\u093f\u0924\u0970",
+      "\u0905\u0915\u094d\u0924\u0942\u0970",
+      "\u0928\u0935\u0970",
+      "\u0926\u093f\u0938\u0970"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u093c\u0930\u0935\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u0948\u0932",
+      "\u092e\u0908",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u0924",
+      "\u0938\u093f\u0924\u0902\u092c\u0930",
+      "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+      "\u0928\u0935\u0902\u092c\u0930",
+      "\u0926\u093f\u0938\u0902\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd/MM/y h:mm:ss a",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "hi-in",
+  "localeID": "hi_IN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi.js
new file mode 100644
index 0000000..246678f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_hi.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "am",
+      "pm"
+    ],
+    "DAY": [
+      "\u0930\u0935\u093f\u0935\u093e\u0930",
+      "\u0938\u094b\u092e\u0935\u093e\u0930",
+      "\u092e\u0902\u0917\u0932\u0935\u093e\u0930",
+      "\u092c\u0941\u0927\u0935\u093e\u0930",
+      "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+      "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+      "\u0936\u0928\u093f\u0935\u093e\u0930"
+    ],
+    "ERANAMES": [
+      "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935",
+      "\u0908\u0938\u0935\u0940 \u0938\u0928"
+    ],
+    "ERAS": [
+      "\u0908\u0938\u093e-\u092a\u0942\u0930\u094d\u0935",
+      "\u0908\u0938\u094d\u0935\u0940"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u093c\u0930\u0935\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u0948\u0932",
+      "\u092e\u0908",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u0924",
+      "\u0938\u093f\u0924\u0902\u092c\u0930",
+      "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+      "\u0928\u0935\u0902\u092c\u0930",
+      "\u0926\u093f\u0938\u0902\u092c\u0930"
+    ],
+    "SHORTDAY": [
+      "\u0930\u0935\u093f",
+      "\u0938\u094b\u092e",
+      "\u092e\u0902\u0917\u0932",
+      "\u092c\u0941\u0927",
+      "\u0917\u0941\u0930\u0941",
+      "\u0936\u0941\u0915\u094d\u0930",
+      "\u0936\u0928\u093f"
+    ],
+    "SHORTMONTH": [
+      "\u091c\u0928\u0970",
+      "\u092b\u093c\u0930\u0970",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u0948\u0932",
+      "\u092e\u0908",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u0970",
+      "\u0905\u0917\u0970",
+      "\u0938\u093f\u0924\u0970",
+      "\u0905\u0915\u094d\u0924\u0942\u0970",
+      "\u0928\u0935\u0970",
+      "\u0926\u093f\u0938\u0970"
+    ],
+    "STANDALONEMONTH": [
+      "\u091c\u0928\u0935\u0930\u0940",
+      "\u092b\u093c\u0930\u0935\u0930\u0940",
+      "\u092e\u093e\u0930\u094d\u091a",
+      "\u0905\u092a\u094d\u0930\u0948\u0932",
+      "\u092e\u0908",
+      "\u091c\u0942\u0928",
+      "\u091c\u0941\u0932\u093e\u0908",
+      "\u0905\u0917\u0938\u094d\u0924",
+      "\u0938\u093f\u0924\u0902\u092c\u0930",
+      "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+      "\u0928\u0935\u0902\u092c\u0930",
+      "\u0926\u093f\u0938\u0902\u092c\u0930"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd/MM/y h:mm:ss a",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "hi",
+  "localeID": "hi",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  if (i == 0 || n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[11/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ge.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ge.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ge.js
new file mode 100644
index 0000000..45f5634
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ge.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0440\u0430\u0437\u043c\u04d5",
+      "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0444\u04d5\u0441\u0442\u04d5"
+    ],
+    "DAY": [
+      "\u0445\u0443\u044b\u0446\u0430\u0443\u0431\u043e\u043d",
+      "\u043a\u044a\u0443\u044b\u0440\u0438\u0441\u04d5\u0440",
+      "\u0434\u044b\u0446\u0446\u04d5\u0433",
+      "\u04d5\u0440\u0442\u044b\u0446\u0446\u04d5\u0433",
+      "\u0446\u044b\u043f\u043f\u04d5\u0440\u04d5\u043c",
+      "\u043c\u0430\u0439\u0440\u04d5\u043c\u0431\u043e\u043d",
+      "\u0441\u0430\u0431\u0430\u0442"
+    ],
+    "ERANAMES": [
+      "\u043d.\u0434.\u0430.",
+      "\u043d.\u0434."
+    ],
+    "ERAS": [
+      "\u043d.\u0434.\u0430.",
+      "\u043d.\u0434."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044b",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044b",
+      "\u043c\u0430\u0440\u0442\u044a\u0438\u0439\u044b",
+      "\u0430\u043f\u0440\u0435\u043b\u044b",
+      "\u043c\u0430\u0439\u044b",
+      "\u0438\u044e\u043d\u044b",
+      "\u0438\u044e\u043b\u044b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u044b",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044b",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044b",
+      "\u043d\u043e\u044f\u0431\u0440\u044b",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044b"
+    ],
+    "SHORTDAY": [
+      "\u0445\u0446\u0431",
+      "\u043a\u0440\u0441",
+      "\u0434\u0446\u0433",
+      "\u04d5\u0440\u0442",
+      "\u0446\u043f\u0440",
+      "\u043c\u0440\u0431",
+      "\u0441\u0431\u0442"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044b",
+      "\u0438\u044e\u043b\u044b",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440\u044c",
+      "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u041c\u0430\u0440\u0442\u044a\u0438",
+      "\u0410\u043f\u0440\u0435\u043b\u044c",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d\u044c",
+      "\u0418\u044e\u043b\u044c",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u041d\u043e\u044f\u0431\u0440\u044c",
+      "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y '\u0430\u0437'",
+    "longDate": "d MMMM, y '\u0430\u0437'",
+    "medium": "dd MMM y '\u0430\u0437' HH:mm:ss",
+    "mediumDate": "dd MMM y '\u0430\u0437'",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GEL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "os-ge",
+  "localeID": "os_GE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ru.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ru.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ru.js
new file mode 100644
index 0000000..c183cc2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os-ru.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0440\u0430\u0437\u043c\u04d5",
+      "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0444\u04d5\u0441\u0442\u04d5"
+    ],
+    "DAY": [
+      "\u0445\u0443\u044b\u0446\u0430\u0443\u0431\u043e\u043d",
+      "\u043a\u044a\u0443\u044b\u0440\u0438\u0441\u04d5\u0440",
+      "\u0434\u044b\u0446\u0446\u04d5\u0433",
+      "\u04d5\u0440\u0442\u044b\u0446\u0446\u04d5\u0433",
+      "\u0446\u044b\u043f\u043f\u04d5\u0440\u04d5\u043c",
+      "\u043c\u0430\u0439\u0440\u04d5\u043c\u0431\u043e\u043d",
+      "\u0441\u0430\u0431\u0430\u0442"
+    ],
+    "ERANAMES": [
+      "\u043d.\u0434.\u0430.",
+      "\u043d.\u0434."
+    ],
+    "ERAS": [
+      "\u043d.\u0434.\u0430.",
+      "\u043d.\u0434."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044b",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044b",
+      "\u043c\u0430\u0440\u0442\u044a\u0438\u0439\u044b",
+      "\u0430\u043f\u0440\u0435\u043b\u044b",
+      "\u043c\u0430\u0439\u044b",
+      "\u0438\u044e\u043d\u044b",
+      "\u0438\u044e\u043b\u044b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u044b",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044b",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044b",
+      "\u043d\u043e\u044f\u0431\u0440\u044b",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044b"
+    ],
+    "SHORTDAY": [
+      "\u0445\u0446\u0431",
+      "\u043a\u0440\u0441",
+      "\u0434\u0446\u0433",
+      "\u04d5\u0440\u0442",
+      "\u0446\u043f\u0440",
+      "\u043c\u0440\u0431",
+      "\u0441\u0431\u0442"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044b",
+      "\u0438\u044e\u043b\u044b",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440\u044c",
+      "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u041c\u0430\u0440\u0442\u044a\u0438",
+      "\u0410\u043f\u0440\u0435\u043b\u044c",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d\u044c",
+      "\u0418\u044e\u043b\u044c",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u041d\u043e\u044f\u0431\u0440\u044c",
+      "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y '\u0430\u0437'",
+    "longDate": "d MMMM, y '\u0430\u0437'",
+    "medium": "dd MMM y '\u0430\u0437' HH:mm:ss",
+    "mediumDate": "dd MMM y '\u0430\u0437'",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u0440\u0443\u0431.",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "os-ru",
+  "localeID": "os_RU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os.js
new file mode 100644
index 0000000..281b4a9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_os.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0440\u0430\u0437\u043c\u04d5",
+      "\u04d5\u043c\u0431\u0438\u0441\u0431\u043e\u043d\u044b \u0444\u04d5\u0441\u0442\u04d5"
+    ],
+    "DAY": [
+      "\u0445\u0443\u044b\u0446\u0430\u0443\u0431\u043e\u043d",
+      "\u043a\u044a\u0443\u044b\u0440\u0438\u0441\u04d5\u0440",
+      "\u0434\u044b\u0446\u0446\u04d5\u0433",
+      "\u04d5\u0440\u0442\u044b\u0446\u0446\u04d5\u0433",
+      "\u0446\u044b\u043f\u043f\u04d5\u0440\u04d5\u043c",
+      "\u043c\u0430\u0439\u0440\u04d5\u043c\u0431\u043e\u043d",
+      "\u0441\u0430\u0431\u0430\u0442"
+    ],
+    "ERANAMES": [
+      "\u043d.\u0434.\u0430.",
+      "\u043d.\u0434."
+    ],
+    "ERAS": [
+      "\u043d.\u0434.\u0430.",
+      "\u043d.\u0434."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044b",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044b",
+      "\u043c\u0430\u0440\u0442\u044a\u0438\u0439\u044b",
+      "\u0430\u043f\u0440\u0435\u043b\u044b",
+      "\u043c\u0430\u0439\u044b",
+      "\u0438\u044e\u043d\u044b",
+      "\u0438\u044e\u043b\u044b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442\u044b",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044b",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044b",
+      "\u043d\u043e\u044f\u0431\u0440\u044b",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044b"
+    ],
+    "SHORTDAY": [
+      "\u0445\u0446\u0431",
+      "\u043a\u0440\u0441",
+      "\u0434\u0446\u0433",
+      "\u04d5\u0440\u0442",
+      "\u0446\u043f\u0440",
+      "\u043c\u0440\u0431",
+      "\u0441\u0431\u0442"
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u044f",
+      "\u0438\u044e\u043d\u044b",
+      "\u0438\u044e\u043b\u044b",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440\u044c",
+      "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u041c\u0430\u0440\u0442\u044a\u0438",
+      "\u0410\u043f\u0440\u0435\u043b\u044c",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d\u044c",
+      "\u0418\u044e\u043b\u044c",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u041d\u043e\u044f\u0431\u0440\u044c",
+      "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y '\u0430\u0437'",
+    "longDate": "d MMMM, y '\u0430\u0437'",
+    "medium": "dd MMM y '\u0430\u0437' HH:mm:ss",
+    "mediumDate": "dd MMM y '\u0430\u0437'",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "GEL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "os",
+  "localeID": "os",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab-pk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab-pk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab-pk.js
new file mode 100644
index 0000000..1a3d2ea
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab-pk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u067e\u06cc\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u064f\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "ERANAMES": [
+      "\u0627\u064a\u0633\u0627\u067e\u0648\u0631\u0648",
+      "\u0633\u06ba"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u067e\u06cc\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u064f\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "pa-arab-pk",
+  "localeID": "pa_Arab_PK",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab.js
new file mode 100644
index 0000000..4dd0134
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-arab.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u067e\u06cc\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u064f\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "ERANAMES": [
+      "\u0627\u064a\u0633\u0627\u067e\u0648\u0631\u0648",
+      "\u0633\u06ba"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0627\u062a\u0648\u0627\u0631",
+      "\u067e\u06cc\u0631",
+      "\u0645\u0646\u06af\u0644",
+      "\u0628\u064f\u062f\u06be",
+      "\u062c\u0645\u0639\u0631\u0627\u062a",
+      "\u062c\u0645\u0639\u06c1",
+      "\u06c1\u0641\u062a\u06c1"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u06cc",
+      "\u0641\u0631\u0648\u0631\u06cc",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u0626",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u0626\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "pa-arab",
+  "localeID": "pa_Arab",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru-in.js
new file mode 100644
index 0000000..c9fc7c2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0a2a\u0a42.\u0a26\u0a41.",
+      "\u0a2c\u0a3e.\u0a26\u0a41."
+    ],
+    "DAY": [
+      "\u0a10\u0a24\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30",
+      "\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30",
+      "\u0a2c\u0a41\u0a71\u0a27\u0a35\u0a3e\u0a30",
+      "\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30\u0a35\u0a3e\u0a30"
+    ],
+    "ERANAMES": [
+      "\u0a08\u0a38\u0a35\u0a40 \u0a2a\u0a42\u0a30\u0a35",
+      "\u0a08\u0a38\u0a35\u0a40 \u0a38\u0a70\u0a28"
+    ],
+    "ERAS": [
+      "\u0a08. \u0a2a\u0a42.",
+      "\u0a38\u0a70\u0a28"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0a1c\u0a28\u0a35\u0a30\u0a40",
+      "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e\u0a08",
+      "\u0a05\u0a17\u0a38\u0a24",
+      "\u0a38\u0a24\u0a70\u0a2c\u0a30",
+      "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
+      "\u0a28\u0a35\u0a70\u0a2c\u0a30",
+      "\u0a26\u0a38\u0a70\u0a2c\u0a30"
+    ],
+    "SHORTDAY": [
+      "\u0a10\u0a24",
+      "\u0a38\u0a4b\u0a2e",
+      "\u0a2e\u0a70\u0a17\u0a32",
+      "\u0a2c\u0a41\u0a71\u0a27",
+      "\u0a35\u0a40\u0a30",
+      "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30",
+      "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30"
+    ],
+    "SHORTMONTH": [
+      "\u0a1c\u0a28",
+      "\u0a2b\u0a3c\u0a30",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e",
+      "\u0a05\u0a17",
+      "\u0a38\u0a24\u0a70",
+      "\u0a05\u0a15\u0a24\u0a42",
+      "\u0a28\u0a35\u0a70",
+      "\u0a26\u0a38\u0a70"
+    ],
+    "STANDALONEMONTH": [
+      "\u0a1c\u0a28\u0a35\u0a30\u0a40",
+      "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e\u0a08",
+      "\u0a05\u0a17\u0a38\u0a24",
+      "\u0a38\u0a24\u0a70\u0a2c\u0a30",
+      "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
+      "\u0a28\u0a35\u0a70\u0a2c\u0a30",
+      "\u0a26\u0a38\u0a70\u0a2c\u0a30"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "pa-guru-in",
+  "localeID": "pa_Guru_IN",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru.js
new file mode 100644
index 0000000..4705ac9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa-guru.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0a2a\u0a42.\u0a26\u0a41.",
+      "\u0a2c\u0a3e.\u0a26\u0a41."
+    ],
+    "DAY": [
+      "\u0a10\u0a24\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30",
+      "\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30",
+      "\u0a2c\u0a41\u0a71\u0a27\u0a35\u0a3e\u0a30",
+      "\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30\u0a35\u0a3e\u0a30"
+    ],
+    "ERANAMES": [
+      "\u0a08\u0a38\u0a35\u0a40 \u0a2a\u0a42\u0a30\u0a35",
+      "\u0a08\u0a38\u0a35\u0a40 \u0a38\u0a70\u0a28"
+    ],
+    "ERAS": [
+      "\u0a08. \u0a2a\u0a42.",
+      "\u0a38\u0a70\u0a28"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0a1c\u0a28\u0a35\u0a30\u0a40",
+      "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e\u0a08",
+      "\u0a05\u0a17\u0a38\u0a24",
+      "\u0a38\u0a24\u0a70\u0a2c\u0a30",
+      "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
+      "\u0a28\u0a35\u0a70\u0a2c\u0a30",
+      "\u0a26\u0a38\u0a70\u0a2c\u0a30"
+    ],
+    "SHORTDAY": [
+      "\u0a10\u0a24",
+      "\u0a38\u0a4b\u0a2e",
+      "\u0a2e\u0a70\u0a17\u0a32",
+      "\u0a2c\u0a41\u0a71\u0a27",
+      "\u0a35\u0a40\u0a30",
+      "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30",
+      "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30"
+    ],
+    "SHORTMONTH": [
+      "\u0a1c\u0a28",
+      "\u0a2b\u0a3c\u0a30",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e",
+      "\u0a05\u0a17",
+      "\u0a38\u0a24\u0a70",
+      "\u0a05\u0a15\u0a24\u0a42",
+      "\u0a28\u0a35\u0a70",
+      "\u0a26\u0a38\u0a70"
+    ],
+    "STANDALONEMONTH": [
+      "\u0a1c\u0a28\u0a35\u0a30\u0a40",
+      "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e\u0a08",
+      "\u0a05\u0a17\u0a38\u0a24",
+      "\u0a38\u0a24\u0a70\u0a2c\u0a30",
+      "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
+      "\u0a28\u0a35\u0a70\u0a2c\u0a30",
+      "\u0a26\u0a38\u0a70\u0a2c\u0a30"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "pa-guru",
+  "localeID": "pa_Guru",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa.js
new file mode 100644
index 0000000..e2a9a69
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pa.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0a2a\u0a42.\u0a26\u0a41.",
+      "\u0a2c\u0a3e.\u0a26\u0a41."
+    ],
+    "DAY": [
+      "\u0a10\u0a24\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30",
+      "\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30",
+      "\u0a2c\u0a41\u0a71\u0a27\u0a35\u0a3e\u0a30",
+      "\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30",
+      "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30\u0a35\u0a3e\u0a30"
+    ],
+    "ERANAMES": [
+      "\u0a08\u0a38\u0a35\u0a40 \u0a2a\u0a42\u0a30\u0a35",
+      "\u0a08\u0a38\u0a35\u0a40 \u0a38\u0a70\u0a28"
+    ],
+    "ERAS": [
+      "\u0a08. \u0a2a\u0a42.",
+      "\u0a38\u0a70\u0a28"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0a1c\u0a28\u0a35\u0a30\u0a40",
+      "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e\u0a08",
+      "\u0a05\u0a17\u0a38\u0a24",
+      "\u0a38\u0a24\u0a70\u0a2c\u0a30",
+      "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
+      "\u0a28\u0a35\u0a70\u0a2c\u0a30",
+      "\u0a26\u0a38\u0a70\u0a2c\u0a30"
+    ],
+    "SHORTDAY": [
+      "\u0a10\u0a24",
+      "\u0a38\u0a4b\u0a2e",
+      "\u0a2e\u0a70\u0a17\u0a32",
+      "\u0a2c\u0a41\u0a71\u0a27",
+      "\u0a35\u0a40\u0a30",
+      "\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30",
+      "\u0a38\u0a3c\u0a28\u0a3f\u0a71\u0a1a\u0a30"
+    ],
+    "SHORTMONTH": [
+      "\u0a1c\u0a28",
+      "\u0a2b\u0a3c\u0a30",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e",
+      "\u0a05\u0a17",
+      "\u0a38\u0a24\u0a70",
+      "\u0a05\u0a15\u0a24\u0a42",
+      "\u0a28\u0a35\u0a70",
+      "\u0a26\u0a38\u0a70"
+    ],
+    "STANDALONEMONTH": [
+      "\u0a1c\u0a28\u0a35\u0a30\u0a40",
+      "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40",
+      "\u0a2e\u0a3e\u0a30\u0a1a",
+      "\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32",
+      "\u0a2e\u0a08",
+      "\u0a1c\u0a42\u0a28",
+      "\u0a1c\u0a41\u0a32\u0a3e\u0a08",
+      "\u0a05\u0a17\u0a38\u0a24",
+      "\u0a38\u0a24\u0a70\u0a2c\u0a30",
+      "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
+      "\u0a28\u0a35\u0a70\u0a2c\u0a30",
+      "\u0a26\u0a38\u0a70\u0a2c\u0a30"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "pa",
+  "localeID": "pa",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl-pl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl-pl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl-pl.js
new file mode 100644
index 0000000..f3d2667
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl-pl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "niedziela",
+      "poniedzia\u0142ek",
+      "wtorek",
+      "\u015broda",
+      "czwartek",
+      "pi\u0105tek",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p.n.e.",
+      "n.e."
+    ],
+    "ERAS": [
+      "p.n.e.",
+      "n.e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "stycznia",
+      "lutego",
+      "marca",
+      "kwietnia",
+      "maja",
+      "czerwca",
+      "lipca",
+      "sierpnia",
+      "wrze\u015bnia",
+      "pa\u017adziernika",
+      "listopada",
+      "grudnia"
+    ],
+    "SHORTDAY": [
+      "niedz.",
+      "pon.",
+      "wt.",
+      "\u015br.",
+      "czw.",
+      "pt.",
+      "sob."
+    ],
+    "SHORTMONTH": [
+      "sty",
+      "lut",
+      "mar",
+      "kwi",
+      "maj",
+      "cze",
+      "lip",
+      "sie",
+      "wrz",
+      "pa\u017a",
+      "lis",
+      "gru"
+    ],
+    "STANDALONEMONTH": [
+      "stycze\u0144",
+      "luty",
+      "marzec",
+      "kwiecie\u0144",
+      "maj",
+      "czerwiec",
+      "lipiec",
+      "sierpie\u0144",
+      "wrzesie\u0144",
+      "pa\u017adziernik",
+      "listopad",
+      "grudzie\u0144"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y HH:mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "z\u0142",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pl-pl",
+  "localeID": "pl_PL",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i != 1 && i % 10 >= 0 && i % 10 <= 1 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 12 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl.js
new file mode 100644
index 0000000..0bd6959
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "niedziela",
+      "poniedzia\u0142ek",
+      "wtorek",
+      "\u015broda",
+      "czwartek",
+      "pi\u0105tek",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "p.n.e.",
+      "n.e."
+    ],
+    "ERAS": [
+      "p.n.e.",
+      "n.e."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "stycznia",
+      "lutego",
+      "marca",
+      "kwietnia",
+      "maja",
+      "czerwca",
+      "lipca",
+      "sierpnia",
+      "wrze\u015bnia",
+      "pa\u017adziernika",
+      "listopada",
+      "grudnia"
+    ],
+    "SHORTDAY": [
+      "niedz.",
+      "pon.",
+      "wt.",
+      "\u015br.",
+      "czw.",
+      "pt.",
+      "sob."
+    ],
+    "SHORTMONTH": [
+      "sty",
+      "lut",
+      "mar",
+      "kwi",
+      "maj",
+      "cze",
+      "lip",
+      "sie",
+      "wrz",
+      "pa\u017a",
+      "lis",
+      "gru"
+    ],
+    "STANDALONEMONTH": [
+      "stycze\u0144",
+      "luty",
+      "marzec",
+      "kwiecie\u0144",
+      "maj",
+      "czerwiec",
+      "lipiec",
+      "sierpie\u0144",
+      "wrzesie\u0144",
+      "pa\u017adziernik",
+      "listopad",
+      "grudzie\u0144"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "dd.MM.y HH:mm:ss",
+    "mediumDate": "dd.MM.y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.y HH:mm",
+    "shortDate": "dd.MM.y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "z\u0142",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pl",
+  "localeID": "pl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v == 0 && i != 1 && i % 10 >= 0 && i % 10 <= 1 || vf.v == 0 && i % 10 >= 5 && i % 10 <= 9 || vf.v == 0 && i % 100 >= 12 && i % 100 <= 14) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps-af.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps-af.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps-af.js
new file mode 100644
index 0000000..1c41578
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps-af.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u063a.\u0645.",
+      "\u063a.\u0648."
+    ],
+    "DAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "ERANAMES": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "ERAS": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u064a",
+      "\u0641\u0628\u0631\u0648\u0631\u064a",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06ab\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648\u0631\u064a",
+      "\u0641\u0628\u0631\u0648\u0631\u064a",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06ab\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u064a",
+      "\u0641\u0628\u0631\u0648\u0631\u064a",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06ab\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      3,
+      4
+    ],
+    "fullDate": "EEEE \u062f y \u062f MMMM d",
+    "longDate": "\u062f y \u062f MMMM d",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "y/M/d H:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Af.",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ps-af",
+  "localeID": "ps_AF",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps.js
new file mode 100644
index 0000000..cea6bd2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ps.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u063a.\u0645.",
+      "\u063a.\u0648."
+    ],
+    "DAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "ERANAMES": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "ERAS": [
+      "\u0642.\u0645.",
+      "\u0645."
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "\u062c\u0646\u0648\u0631\u064a",
+      "\u0641\u0628\u0631\u0648\u0631\u064a",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06ab\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+      "\u062f\u0648\u0634\u0646\u0628\u0647",
+      "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+      "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+      "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+      "\u062c\u0645\u0639\u0647",
+      "\u0634\u0646\u0628\u0647"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0648\u0631\u064a",
+      "\u0641\u0628\u0631\u0648\u0631\u064a",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06ab\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0648\u0631\u064a",
+      "\u0641\u0628\u0631\u0648\u0631\u064a",
+      "\u0645\u0627\u0631\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc",
+      "\u062c\u0648\u0646",
+      "\u062c\u0648\u0644\u0627\u06cc",
+      "\u0627\u06ab\u0633\u062a",
+      "\u0633\u067e\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      3,
+      4
+    ],
+    "fullDate": "EEEE \u062f y \u062f MMMM d",
+    "longDate": "\u062f y \u062f MMMM d",
+    "medium": "d MMM y H:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "H:mm:ss",
+    "short": "y/M/d H:mm",
+    "shortDate": "y/M/d",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Af.",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ps",
+  "localeID": "ps",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-ao.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-ao.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-ao.js
new file mode 100644
index 0000000..7b469e6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-ao.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Kz",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-ao",
+  "localeID": "pt_AO",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-br.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-br.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-br.js
new file mode 100644
index 0000000..85ed9e2
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-br.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "Antes de Cristo",
+      "Ano do Senhor"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d 'de' MMM 'de' y HH:mm:ss",
+    "mediumDate": "d 'de' MMM 'de' y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "pt-br",
+  "localeID": "pt_BR",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-cv.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-cv.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-cv.js
new file mode 100644
index 0000000..1f2a287
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-cv.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CVE",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-cv",
+  "localeID": "pt_CV",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-gw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-gw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-gw.js
new file mode 100644
index 0000000..9e73f1b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-gw.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-gw",
+  "localeID": "pt_GW",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mo.js
new file mode 100644
index 0000000..1ab1912
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mo.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MOP",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-mo",
+  "localeID": "pt_MO",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mz.js
new file mode 100644
index 0000000..18c42f7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-mz.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "MTn",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-mz",
+  "localeID": "pt_MZ",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-pt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-pt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-pt.js
new file mode 100644
index 0000000..dbaeea6
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-pt.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-pt",
+  "localeID": "pt_PT",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-st.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-st.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-st.js
new file mode 100644
index 0000000..4d1a175
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-st.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Db",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-st",
+  "localeID": "pt_ST",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-tl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-tl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-tl.js
new file mode 100644
index 0000000..0e4e281
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt-tl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "da manh\u00e3",
+      "da tarde"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "antes de Cristo",
+      "depois de Cristo"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "dd/MM/y HH:mm:ss",
+    "mediumDate": "dd/MM/y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "pt-tl",
+  "localeID": "pt_TL",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt.js
new file mode 100644
index 0000000..5b3e442
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_pt.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "domingo",
+      "segunda-feira",
+      "ter\u00e7a-feira",
+      "quarta-feira",
+      "quinta-feira",
+      "sexta-feira",
+      "s\u00e1bado"
+    ],
+    "ERANAMES": [
+      "Antes de Cristo",
+      "Ano do Senhor"
+    ],
+    "ERAS": [
+      "a.C.",
+      "d.C."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "SHORTDAY": [
+      "dom",
+      "seg",
+      "ter",
+      "qua",
+      "qui",
+      "sex",
+      "s\u00e1b"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "fev",
+      "mar",
+      "abr",
+      "mai",
+      "jun",
+      "jul",
+      "ago",
+      "set",
+      "out",
+      "nov",
+      "dez"
+    ],
+    "STANDALONEMONTH": [
+      "janeiro",
+      "fevereiro",
+      "mar\u00e7o",
+      "abril",
+      "maio",
+      "junho",
+      "julho",
+      "agosto",
+      "setembro",
+      "outubro",
+      "novembro",
+      "dezembro"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d 'de' MMMM 'de' y",
+    "longDate": "d 'de' MMMM 'de' y",
+    "medium": "d 'de' MMM 'de' y HH:mm:ss",
+    "mediumDate": "d 'de' MMM 'de' y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/yy HH:mm",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R$",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "pt",
+  "localeID": "pt",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 2 && n != 2) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[08/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng.js
new file mode 100644
index 0000000..be8968d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi-tfng.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c",
+      "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c"
+    ],
+    "DAY": [
+      "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59",
+      "\u2d30\u2d62\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d55\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d61\u2d30\u2d59",
+      "\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59"
+    ],
+    "ERANAMES": [
+      "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30",
+      "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30"
+    ],
+    "ERAS": [
+      "\u2d37\u2d30\u2d44",
+      "\u2d37\u2d3c\u2d44"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "SHORTDAY": [
+      "\u2d30\u2d59\u2d30",
+      "\u2d30\u2d62\u2d4f",
+      "\u2d30\u2d59\u2d49",
+      "\u2d30\u2d3d\u2d55",
+      "\u2d30\u2d3d\u2d61",
+      "\u2d30\u2d59\u2d49\u2d4e",
+      "\u2d30\u2d59\u2d49\u2d39"
+    ],
+    "SHORTMONTH": [
+      "\u2d49\u2d4f\u2d4f",
+      "\u2d31\u2d55\u2d30",
+      "\u2d4e\u2d30\u2d55",
+      "\u2d49\u2d31\u2d54",
+      "\u2d4e\u2d30\u2d62",
+      "\u2d62\u2d53\u2d4f",
+      "\u2d62\u2d53\u2d4d",
+      "\u2d56\u2d53\u2d5b",
+      "\u2d5b\u2d53\u2d5c",
+      "\u2d3d\u2d5c\u2d53",
+      "\u2d4f\u2d53\u2d61",
+      "\u2d37\u2d53\u2d4a"
+    ],
+    "STANDALONEMONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "shi-tfng",
+  "localeID": "shi_Tfng",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi.js
new file mode 100644
index 0000000..cc1e531
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_shi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u2d5c\u2d49\u2d3c\u2d30\u2d61\u2d5c",
+      "\u2d5c\u2d30\u2d37\u2d33\u2d33\u2d6f\u2d30\u2d5c"
+    ],
+    "DAY": [
+      "\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59",
+      "\u2d30\u2d62\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d55\u2d30\u2d59",
+      "\u2d30\u2d3d\u2d61\u2d30\u2d59",
+      "\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59",
+      "\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59"
+    ],
+    "ERANAMES": [
+      "\u2d37\u2d30\u2d5c \u2d4f \u2d44\u2d49\u2d59\u2d30",
+      "\u2d37\u2d3c\u2d3c\u2d49\u2d54 \u2d4f \u2d44\u2d49\u2d59\u2d30"
+    ],
+    "ERAS": [
+      "\u2d37\u2d30\u2d44",
+      "\u2d37\u2d3c\u2d44"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "SHORTDAY": [
+      "\u2d30\u2d59\u2d30",
+      "\u2d30\u2d62\u2d4f",
+      "\u2d30\u2d59\u2d49",
+      "\u2d30\u2d3d\u2d55",
+      "\u2d30\u2d3d\u2d61",
+      "\u2d30\u2d59\u2d49\u2d4e",
+      "\u2d30\u2d59\u2d49\u2d39"
+    ],
+    "SHORTMONTH": [
+      "\u2d49\u2d4f\u2d4f",
+      "\u2d31\u2d55\u2d30",
+      "\u2d4e\u2d30\u2d55",
+      "\u2d49\u2d31\u2d54",
+      "\u2d4e\u2d30\u2d62",
+      "\u2d62\u2d53\u2d4f",
+      "\u2d62\u2d53\u2d4d",
+      "\u2d56\u2d53\u2d5b",
+      "\u2d5b\u2d53\u2d5c",
+      "\u2d3d\u2d5c\u2d53",
+      "\u2d4f\u2d53\u2d61",
+      "\u2d37\u2d53\u2d4a"
+    ],
+    "STANDALONEMONTH": [
+      "\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54",
+      "\u2d31\u2d55\u2d30\u2d62\u2d55",
+      "\u2d4e\u2d30\u2d55\u2d5a",
+      "\u2d49\u2d31\u2d54\u2d49\u2d54",
+      "\u2d4e\u2d30\u2d62\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4f\u2d62\u2d53",
+      "\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63",
+      "\u2d56\u2d53\u2d5b\u2d5c",
+      "\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d3d\u2d5c\u2d53\u2d31\u2d54",
+      "\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54",
+      "\u2d37\u2d53\u2d4a\u2d30\u2d4f\u2d31\u2d49\u2d54"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM, y HH:mm:ss",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "shi",
+  "localeID": "shi",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si-lk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si-lk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si-lk.js
new file mode 100644
index 0000000..d509323
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si-lk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0db4\u0dd9.\u0dc0.",
+      "\u0db4.\u0dc0."
+    ],
+    "DAY": [
+      "\u0d89\u0dbb\u0dd2\u0daf\u0dcf",
+      "\u0dc3\u0db3\u0dd4\u0daf\u0dcf",
+      "\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf",
+      "\u0db6\u0daf\u0dcf\u0daf\u0dcf",
+      "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf",
+      "\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf",
+      "\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf"
+    ],
+    "ERANAMES": [
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0db4\u0dd6\u0dbb\u0dca\u200d\u0dc0",
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0dc0\u0dbb\u0dca\u200d\u0dc2"
+    ],
+    "ERAS": [
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0db4\u0dd6.",
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0dc0."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4",
+      "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca",
+      "\u0db8\u0dd0\u0dba\u0dd2",
+      "\u0da2\u0dd6\u0db1\u0dd2",
+      "\u0da2\u0dd6\u0dbd\u0dd2",
+      "\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4",
+      "\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca",
+      "\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca"
+    ],
+    "SHORTDAY": [
+      "\u0d89\u0dbb\u0dd2\u0daf\u0dcf",
+      "\u0dc3\u0db3\u0dd4\u0daf\u0dcf",
+      "\u0d85\u0d9f\u0dc4",
+      "\u0db6\u0daf\u0dcf\u0daf\u0dcf",
+      "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca",
+      "\u0dc3\u0dd2\u0d9a\u0dd4",
+      "\u0dc3\u0dd9\u0db1"
+    ],
+    "SHORTMONTH": [
+      "\u0da2\u0db1",
+      "\u0db4\u0dd9\u0db6",
+      "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4",
+      "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca",
+      "\u0db8\u0dd0\u0dba\u0dd2",
+      "\u0da2\u0dd6\u0db1\u0dd2",
+      "\u0da2\u0dd6\u0dbd\u0dd2",
+      "\u0d85\u0d9c\u0ddd",
+      "\u0dc3\u0dd0\u0db4\u0dca",
+      "\u0d94\u0d9a\u0dca",
+      "\u0db1\u0ddc\u0dc0\u0dd0",
+      "\u0daf\u0dd9\u0dc3\u0dd0"
+    ],
+    "STANDALONEMONTH": [
+      "\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4",
+      "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca",
+      "\u0db8\u0dd0\u0dba\u0dd2",
+      "\u0da2\u0dd6\u0db1\u0dd2",
+      "\u0da2\u0dd6\u0dbd\u0dd2",
+      "\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4",
+      "\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca",
+      "\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d a h.mm.ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "a h.mm.ss",
+    "short": "y-MM-dd a h.mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "a h.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "si-lk",
+  "localeID": "si_LK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if ((n == 0 || n == 1) || i == 0 && vf.f == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si.js
new file mode 100644
index 0000000..83f5fb5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_si.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0db4\u0dd9.\u0dc0.",
+      "\u0db4.\u0dc0."
+    ],
+    "DAY": [
+      "\u0d89\u0dbb\u0dd2\u0daf\u0dcf",
+      "\u0dc3\u0db3\u0dd4\u0daf\u0dcf",
+      "\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf",
+      "\u0db6\u0daf\u0dcf\u0daf\u0dcf",
+      "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf",
+      "\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf",
+      "\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf"
+    ],
+    "ERANAMES": [
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0db4\u0dd6\u0dbb\u0dca\u200d\u0dc0",
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2\u0dc3\u0dca\u0dad\u0dd4 \u0dc0\u0dbb\u0dca\u200d\u0dc2"
+    ],
+    "ERAS": [
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0db4\u0dd6.",
+      "\u0d9a\u0dca\u200d\u0dbb\u0dd2.\u0dc0."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4",
+      "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca",
+      "\u0db8\u0dd0\u0dba\u0dd2",
+      "\u0da2\u0dd6\u0db1\u0dd2",
+      "\u0da2\u0dd6\u0dbd\u0dd2",
+      "\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4",
+      "\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca",
+      "\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca"
+    ],
+    "SHORTDAY": [
+      "\u0d89\u0dbb\u0dd2\u0daf\u0dcf",
+      "\u0dc3\u0db3\u0dd4\u0daf\u0dcf",
+      "\u0d85\u0d9f\u0dc4",
+      "\u0db6\u0daf\u0dcf\u0daf\u0dcf",
+      "\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca",
+      "\u0dc3\u0dd2\u0d9a\u0dd4",
+      "\u0dc3\u0dd9\u0db1"
+    ],
+    "SHORTMONTH": [
+      "\u0da2\u0db1",
+      "\u0db4\u0dd9\u0db6",
+      "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4",
+      "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca",
+      "\u0db8\u0dd0\u0dba\u0dd2",
+      "\u0da2\u0dd6\u0db1\u0dd2",
+      "\u0da2\u0dd6\u0dbd\u0dd2",
+      "\u0d85\u0d9c\u0ddd",
+      "\u0dc3\u0dd0\u0db4\u0dca",
+      "\u0d94\u0d9a\u0dca",
+      "\u0db1\u0ddc\u0dc0\u0dd0",
+      "\u0daf\u0dd9\u0dc3\u0dd0"
+    ],
+    "STANDALONEMONTH": [
+      "\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2",
+      "\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4",
+      "\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca",
+      "\u0db8\u0dd0\u0dba\u0dd2",
+      "\u0da2\u0dd6\u0db1\u0dd2",
+      "\u0da2\u0dd6\u0dbd\u0dd2",
+      "\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4",
+      "\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca",
+      "\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca",
+      "\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d a h.mm.ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "a h.mm.ss",
+    "short": "y-MM-dd a h.mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "a h.mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "si",
+  "localeID": "si",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if ((n == 0 || n == 1) || i == 0 && vf.f == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk-sk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk-sk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk-sk.js
new file mode 100644
index 0000000..2f5ba5d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk-sk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopoludnia",
+      "odpoludnia"
+    ],
+    "DAY": [
+      "nede\u013ea",
+      "pondelok",
+      "utorok",
+      "streda",
+      "\u0161tvrtok",
+      "piatok",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "pred Kristom",
+      "po Kristovi"
+    ],
+    "ERAS": [
+      "pred Kr.",
+      "po Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janu\u00e1ra",
+      "febru\u00e1ra",
+      "marca",
+      "apr\u00edla",
+      "m\u00e1ja",
+      "j\u00fana",
+      "j\u00fala",
+      "augusta",
+      "septembra",
+      "okt\u00f3bra",
+      "novembra",
+      "decembra"
+    ],
+    "SHORTDAY": [
+      "ne",
+      "po",
+      "ut",
+      "st",
+      "\u0161t",
+      "pi",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "m\u00e1j",
+      "j\u00fan",
+      "j\u00fal",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "janu\u00e1r",
+      "febru\u00e1r",
+      "marec",
+      "apr\u00edl",
+      "m\u00e1j",
+      "j\u00fan",
+      "j\u00fal",
+      "august",
+      "september",
+      "okt\u00f3ber",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. M. y H:mm:ss",
+    "mediumDate": "d. M. y",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sk-sk",
+  "localeID": "sk_SK",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk.js
new file mode 100644
index 0000000..aa745cf
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sk.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dopoludnia",
+      "odpoludnia"
+    ],
+    "DAY": [
+      "nede\u013ea",
+      "pondelok",
+      "utorok",
+      "streda",
+      "\u0161tvrtok",
+      "piatok",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "pred Kristom",
+      "po Kristovi"
+    ],
+    "ERAS": [
+      "pred Kr.",
+      "po Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janu\u00e1ra",
+      "febru\u00e1ra",
+      "marca",
+      "apr\u00edla",
+      "m\u00e1ja",
+      "j\u00fana",
+      "j\u00fala",
+      "augusta",
+      "septembra",
+      "okt\u00f3bra",
+      "novembra",
+      "decembra"
+    ],
+    "SHORTDAY": [
+      "ne",
+      "po",
+      "ut",
+      "st",
+      "\u0161t",
+      "pi",
+      "so"
+    ],
+    "SHORTMONTH": [
+      "jan",
+      "feb",
+      "mar",
+      "apr",
+      "m\u00e1j",
+      "j\u00fan",
+      "j\u00fal",
+      "aug",
+      "sep",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "STANDALONEMONTH": [
+      "janu\u00e1r",
+      "febru\u00e1r",
+      "marec",
+      "apr\u00edl",
+      "m\u00e1j",
+      "j\u00fan",
+      "j\u00fal",
+      "august",
+      "september",
+      "okt\u00f3ber",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. M. y H:mm:ss",
+    "mediumDate": "d. M. y",
+    "mediumTime": "H:mm:ss",
+    "short": "dd.MM.yy H:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "H:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sk",
+  "localeID": "sk",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  if (i >= 2 && i <= 4 && vf.v == 0) {    return PLURAL_CATEGORY.FEW;  }  if (vf.v != 0) {    return PLURAL_CATEGORY.MANY;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl-si.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl-si.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl-si.js
new file mode 100644
index 0000000..6bec18e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl-si.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dop.",
+      "pop."
+    ],
+    "DAY": [
+      "nedelja",
+      "ponedeljek",
+      "torek",
+      "sreda",
+      "\u010detrtek",
+      "petek",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "pred na\u0161im \u0161tetjem",
+      "na\u0161e \u0161tetje"
+    ],
+    "ERAS": [
+      "pr. n. \u0161t.",
+      "po Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "marec",
+      "april",
+      "maj",
+      "junij",
+      "julij",
+      "avgust",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "ned.",
+      "pon.",
+      "tor.",
+      "sre.",
+      "\u010det.",
+      "pet.",
+      "sob."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "maj",
+      "jun.",
+      "jul.",
+      "avg.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "marec",
+      "april",
+      "maj",
+      "junij",
+      "julij",
+      "avgust",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y",
+    "longDate": "dd. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d. MM. yy HH:mm",
+    "shortDate": "d. MM. yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sl-si",
+  "localeID": "sl_SI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 100 == 1) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 100 == 2) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl.js
new file mode 100644
index 0000000..8155bfc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "dop.",
+      "pop."
+    ],
+    "DAY": [
+      "nedelja",
+      "ponedeljek",
+      "torek",
+      "sreda",
+      "\u010detrtek",
+      "petek",
+      "sobota"
+    ],
+    "ERANAMES": [
+      "pred na\u0161im \u0161tetjem",
+      "na\u0161e \u0161tetje"
+    ],
+    "ERAS": [
+      "pr. n. \u0161t.",
+      "po Kr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "januar",
+      "februar",
+      "marec",
+      "april",
+      "maj",
+      "junij",
+      "julij",
+      "avgust",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "SHORTDAY": [
+      "ned.",
+      "pon.",
+      "tor.",
+      "sre.",
+      "\u010det.",
+      "pet.",
+      "sob."
+    ],
+    "SHORTMONTH": [
+      "jan.",
+      "feb.",
+      "mar.",
+      "apr.",
+      "maj",
+      "jun.",
+      "jul.",
+      "avg.",
+      "sep.",
+      "okt.",
+      "nov.",
+      "dec."
+    ],
+    "STANDALONEMONTH": [
+      "januar",
+      "februar",
+      "marec",
+      "april",
+      "maj",
+      "junij",
+      "julij",
+      "avgust",
+      "september",
+      "oktober",
+      "november",
+      "december"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y",
+    "longDate": "dd. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d. MM. yy HH:mm",
+    "shortDate": "d. MM. yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sl",
+  "localeID": "sl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 100 == 1) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 100 == 2) {    return PLURAL_CATEGORY.TWO;  }  if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn-fi.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn-fi.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn-fi.js
new file mode 100644
index 0000000..912e218
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn-fi.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "pasepeeivi",
+      "vuossaarg\u00e2",
+      "majebaarg\u00e2",
+      "koskoho",
+      "tuor\u00e2stuv",
+      "v\u00e1stuppeeivi",
+      "l\u00e1vurduv"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "M01",
+      "M02",
+      "M03",
+      "M04",
+      "M05",
+      "M06",
+      "M07",
+      "M08",
+      "M09",
+      "M10",
+      "M11",
+      "M12"
+    ],
+    "SHORTDAY": [
+      "pa",
+      "vu",
+      "ma",
+      "ko",
+      "tu",
+      "v\u00e1",
+      "l\u00e1"
+    ],
+    "SHORTMONTH": [
+      "M01",
+      "M02",
+      "M03",
+      "M04",
+      "M05",
+      "M06",
+      "M07",
+      "M08",
+      "M09",
+      "M10",
+      "M11",
+      "M12"
+    ],
+    "STANDALONEMONTH": [
+      "u\u0111\u0111\u00e2ivem\u00e1\u00e1nu",
+      "kuov\u00e2m\u00e1\u00e1nu",
+      "njuh\u010d\u00e2m\u00e1\u00e1nu",
+      "cu\u00e1\u014buim\u00e1\u00e1nu",
+      "vyesim\u00e1\u00e1nu",
+      "kesim\u00e1\u00e1nu",
+      "syeinim\u00e1\u00e1nu",
+      "porgem\u00e1\u00e1nu",
+      "\u010doh\u010d\u00e2m\u00e1\u00e1nu",
+      "roovv\u00e2dm\u00e1\u00e1nu",
+      "skamm\u00e2m\u00e1\u00e1nu",
+      "juovl\u00e2m\u00e1\u00e1nu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "smn-fi",
+  "localeID": "smn_FI",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn.js
new file mode 100644
index 0000000..c7cba3c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_smn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "pasepeeivi",
+      "vuossaarg\u00e2",
+      "majebaarg\u00e2",
+      "koskoho",
+      "tuor\u00e2stuv",
+      "v\u00e1stuppeeivi",
+      "l\u00e1vurduv"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "M01",
+      "M02",
+      "M03",
+      "M04",
+      "M05",
+      "M06",
+      "M07",
+      "M08",
+      "M09",
+      "M10",
+      "M11",
+      "M12"
+    ],
+    "SHORTDAY": [
+      "pa",
+      "vu",
+      "ma",
+      "ko",
+      "tu",
+      "v\u00e1",
+      "l\u00e1"
+    ],
+    "SHORTMONTH": [
+      "M01",
+      "M02",
+      "M03",
+      "M04",
+      "M05",
+      "M06",
+      "M07",
+      "M08",
+      "M09",
+      "M10",
+      "M11",
+      "M12"
+    ],
+    "STANDALONEMONTH": [
+      "u\u0111\u0111\u00e2ivem\u00e1\u00e1nu",
+      "kuov\u00e2m\u00e1\u00e1nu",
+      "njuh\u010d\u00e2m\u00e1\u00e1nu",
+      "cu\u00e1\u014buim\u00e1\u00e1nu",
+      "vyesim\u00e1\u00e1nu",
+      "kesim\u00e1\u00e1nu",
+      "syeinim\u00e1\u00e1nu",
+      "porgem\u00e1\u00e1nu",
+      "\u010doh\u010d\u00e2m\u00e1\u00e1nu",
+      "roovv\u00e2dm\u00e1\u00e1nu",
+      "skamm\u00e2m\u00e1\u00e1nu",
+      "juovl\u00e2m\u00e1\u00e1nu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "smn",
+  "localeID": "smn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn-zw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn-zw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn-zw.js
new file mode 100644
index 0000000..6a80289
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn-zw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Svondo",
+      "Muvhuro",
+      "Chipiri",
+      "Chitatu",
+      "China",
+      "Chishanu",
+      "Mugovera"
+    ],
+    "ERANAMES": [
+      "Kristo asati auya",
+      "Kristo ashaya"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ndira",
+      "Kukadzi",
+      "Kurume",
+      "Kubvumbi",
+      "Chivabvu",
+      "Chikumi",
+      "Chikunguru",
+      "Nyamavhuvhu",
+      "Gunyana",
+      "Gumiguru",
+      "Mbudzi",
+      "Zvita"
+    ],
+    "SHORTDAY": [
+      "Svo",
+      "Muv",
+      "Chip",
+      "Chit",
+      "Chin",
+      "Chis",
+      "Mug"
+    ],
+    "SHORTMONTH": [
+      "Ndi",
+      "Kuk",
+      "Kur",
+      "Kub",
+      "Chv",
+      "Chk",
+      "Chg",
+      "Nya",
+      "Gun",
+      "Gum",
+      "Mb",
+      "Zvi"
+    ],
+    "STANDALONEMONTH": [
+      "Ndira",
+      "Kukadzi",
+      "Kurume",
+      "Kubvumbi",
+      "Chivabvu",
+      "Chikumi",
+      "Chikunguru",
+      "Nyamavhuvhu",
+      "Gunyana",
+      "Gumiguru",
+      "Mbudzi",
+      "Zvita"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sn-zw",
+  "localeID": "sn_ZW",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn.js
new file mode 100644
index 0000000..96f0168
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Svondo",
+      "Muvhuro",
+      "Chipiri",
+      "Chitatu",
+      "China",
+      "Chishanu",
+      "Mugovera"
+    ],
+    "ERANAMES": [
+      "Kristo asati auya",
+      "Kristo ashaya"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ndira",
+      "Kukadzi",
+      "Kurume",
+      "Kubvumbi",
+      "Chivabvu",
+      "Chikumi",
+      "Chikunguru",
+      "Nyamavhuvhu",
+      "Gunyana",
+      "Gumiguru",
+      "Mbudzi",
+      "Zvita"
+    ],
+    "SHORTDAY": [
+      "Svo",
+      "Muv",
+      "Chip",
+      "Chit",
+      "Chin",
+      "Chis",
+      "Mug"
+    ],
+    "SHORTMONTH": [
+      "Ndi",
+      "Kuk",
+      "Kur",
+      "Kub",
+      "Chv",
+      "Chk",
+      "Chg",
+      "Nya",
+      "Gun",
+      "Gum",
+      "Mb",
+      "Zvi"
+    ],
+    "STANDALONEMONTH": [
+      "Ndira",
+      "Kukadzi",
+      "Kurume",
+      "Kubvumbi",
+      "Chivabvu",
+      "Chikumi",
+      "Chikunguru",
+      "Nyamavhuvhu",
+      "Gunyana",
+      "Gumiguru",
+      "Mbudzi",
+      "Zvita"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sn",
+  "localeID": "sn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-dj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-dj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-dj.js
new file mode 100644
index 0000000..bc58c00
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-dj.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "sn.",
+      "gn."
+    ],
+    "DAY": [
+      "Axad",
+      "Isniin",
+      "Talaado",
+      "Arbaco",
+      "Khamiis",
+      "Jimco",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Ciise ka hor (CS)",
+      "Ciise ka dib (CS)"
+    ],
+    "ERAS": [
+      "CK",
+      "CD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "SHORTDAY": [
+      "Axd",
+      "Isn",
+      "Tal",
+      "Arb",
+      "Kha",
+      "Jim",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Kob",
+      "Lab",
+      "Sad",
+      "Afr",
+      "Sha",
+      "Lix",
+      "Tod",
+      "Sid",
+      "Sag",
+      "Tob",
+      "KIT",
+      "LIT"
+    ],
+    "STANDALONEMONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Fdj",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "so-dj",
+  "localeID": "so_DJ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-et.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-et.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-et.js
new file mode 100644
index 0000000..98b5e4d
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-et.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "sn.",
+      "gn."
+    ],
+    "DAY": [
+      "Axad",
+      "Isniin",
+      "Talaado",
+      "Arbaco",
+      "Khamiis",
+      "Jimco",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Ciise ka hor (CS)",
+      "Ciise ka dib (CS)"
+    ],
+    "ERAS": [
+      "CK",
+      "CD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "SHORTDAY": [
+      "Axd",
+      "Isn",
+      "Tal",
+      "Arb",
+      "Kha",
+      "Jim",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Kob",
+      "Lab",
+      "Sad",
+      "Afr",
+      "Sha",
+      "Lix",
+      "Tod",
+      "Sid",
+      "Sag",
+      "Tob",
+      "KIT",
+      "LIT"
+    ],
+    "STANDALONEMONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "so-et",
+  "localeID": "so_ET",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-ke.js
new file mode 100644
index 0000000..55b8838
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "sn.",
+      "gn."
+    ],
+    "DAY": [
+      "Axad",
+      "Isniin",
+      "Talaado",
+      "Arbaco",
+      "Khamiis",
+      "Jimco",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Ciise ka hor (CS)",
+      "Ciise ka dib (CS)"
+    ],
+    "ERAS": [
+      "CK",
+      "CD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "SHORTDAY": [
+      "Axd",
+      "Isn",
+      "Tal",
+      "Arb",
+      "Kha",
+      "Jim",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Kob",
+      "Lab",
+      "Sad",
+      "Afr",
+      "Sha",
+      "Lix",
+      "Tod",
+      "Sid",
+      "Sag",
+      "Tob",
+      "KIT",
+      "LIT"
+    ],
+    "STANDALONEMONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "so-ke",
+  "localeID": "so_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-so.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-so.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-so.js
new file mode 100644
index 0000000..3278429
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so-so.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "sn.",
+      "gn."
+    ],
+    "DAY": [
+      "Axad",
+      "Isniin",
+      "Talaado",
+      "Arbaco",
+      "Khamiis",
+      "Jimco",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Ciise ka hor (CS)",
+      "Ciise ka dib (CS)"
+    ],
+    "ERAS": [
+      "CK",
+      "CD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "SHORTDAY": [
+      "Axd",
+      "Isn",
+      "Tal",
+      "Arb",
+      "Kha",
+      "Jim",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Kob",
+      "Lab",
+      "Sad",
+      "Afr",
+      "Sha",
+      "Lix",
+      "Tod",
+      "Sid",
+      "Sag",
+      "Tob",
+      "KIT",
+      "LIT"
+    ],
+    "STANDALONEMONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SOS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "so-so",
+  "localeID": "so_SO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so.js
new file mode 100644
index 0000000..33068e3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_so.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "sn.",
+      "gn."
+    ],
+    "DAY": [
+      "Axad",
+      "Isniin",
+      "Talaado",
+      "Arbaco",
+      "Khamiis",
+      "Jimco",
+      "Sabti"
+    ],
+    "ERANAMES": [
+      "Ciise ka hor (CS)",
+      "Ciise ka dib (CS)"
+    ],
+    "ERAS": [
+      "CK",
+      "CD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "SHORTDAY": [
+      "Axd",
+      "Isn",
+      "Tal",
+      "Arb",
+      "Kha",
+      "Jim",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Kob",
+      "Lab",
+      "Sad",
+      "Afr",
+      "Sha",
+      "Lix",
+      "Tod",
+      "Sid",
+      "Sag",
+      "Tob",
+      "KIT",
+      "LIT"
+    ],
+    "STANDALONEMONTH": [
+      "Bisha Koobaad",
+      "Bisha Labaad",
+      "Bisha Saddexaad",
+      "Bisha Afraad",
+      "Bisha Shanaad",
+      "Bisha Lixaad",
+      "Bisha Todobaad",
+      "Bisha Sideedaad",
+      "Bisha Sagaalaad",
+      "Bisha Tobnaad",
+      "Bisha Kow iyo Tobnaad",
+      "Bisha Laba iyo Tobnaad"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM dd, y",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "SOS",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "so",
+  "localeID": "so",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-al.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-al.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-al.js
new file mode 100644
index 0000000..d72e4dd
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-al.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "paradite",
+      "pasdite"
+    ],
+    "DAY": [
+      "e diel",
+      "e h\u00ebn\u00eb",
+      "e mart\u00eb",
+      "e m\u00ebrkur\u00eb",
+      "e enjte",
+      "e premte",
+      "e shtun\u00eb"
+    ],
+    "ERANAMES": [
+      "para er\u00ebs s\u00eb re",
+      "er\u00ebs s\u00eb re"
+    ],
+    "ERAS": [
+      "p.e.r.",
+      "e.r."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janar",
+      "shkurt",
+      "mars",
+      "prill",
+      "maj",
+      "qershor",
+      "korrik",
+      "gusht",
+      "shtator",
+      "tetor",
+      "n\u00ebntor",
+      "dhjetor"
+    ],
+    "SHORTDAY": [
+      "Die",
+      "H\u00ebn",
+      "Mar",
+      "M\u00ebr",
+      "Enj",
+      "Pre",
+      "Sht"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Shk",
+      "Mar",
+      "Pri",
+      "Maj",
+      "Qer",
+      "Kor",
+      "Gsh",
+      "Sht",
+      "Tet",
+      "N\u00ebn",
+      "Dhj"
+    ],
+    "STANDALONEMONTH": [
+      "Janar",
+      "Shkurt",
+      "Mars",
+      "Prill",
+      "Maj",
+      "Qershor",
+      "Korrik",
+      "Gusht",
+      "Shtator",
+      "Tetor",
+      "N\u00ebntor",
+      "Dhjetor"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy HH:mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Lek",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sq-al",
+  "localeID": "sq_AL",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-mk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-mk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-mk.js
new file mode 100644
index 0000000..c7cb626
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-mk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "paradite",
+      "pasdite"
+    ],
+    "DAY": [
+      "e diel",
+      "e h\u00ebn\u00eb",
+      "e mart\u00eb",
+      "e m\u00ebrkur\u00eb",
+      "e enjte",
+      "e premte",
+      "e shtun\u00eb"
+    ],
+    "ERANAMES": [
+      "para er\u00ebs s\u00eb re",
+      "er\u00ebs s\u00eb re"
+    ],
+    "ERAS": [
+      "p.e.r.",
+      "e.r."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janar",
+      "shkurt",
+      "mars",
+      "prill",
+      "maj",
+      "qershor",
+      "korrik",
+      "gusht",
+      "shtator",
+      "tetor",
+      "n\u00ebntor",
+      "dhjetor"
+    ],
+    "SHORTDAY": [
+      "Die",
+      "H\u00ebn",
+      "Mar",
+      "M\u00ebr",
+      "Enj",
+      "Pre",
+      "Sht"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Shk",
+      "Mar",
+      "Pri",
+      "Maj",
+      "Qer",
+      "Kor",
+      "Gsh",
+      "Sht",
+      "Tet",
+      "N\u00ebn",
+      "Dhj"
+    ],
+    "STANDALONEMONTH": [
+      "Janar",
+      "Shkurt",
+      "Mars",
+      "Prill",
+      "Maj",
+      "Qershor",
+      "Korrik",
+      "Gusht",
+      "Shtator",
+      "Tetor",
+      "N\u00ebntor",
+      "Dhjetor"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy HH:mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "din",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sq-mk",
+  "localeID": "sq_MK",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-xk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-xk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-xk.js
new file mode 100644
index 0000000..5b5e0c5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq-xk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "paradite",
+      "pasdite"
+    ],
+    "DAY": [
+      "e diel",
+      "e h\u00ebn\u00eb",
+      "e mart\u00eb",
+      "e m\u00ebrkur\u00eb",
+      "e enjte",
+      "e premte",
+      "e shtun\u00eb"
+    ],
+    "ERANAMES": [
+      "para er\u00ebs s\u00eb re",
+      "er\u00ebs s\u00eb re"
+    ],
+    "ERAS": [
+      "p.e.r.",
+      "e.r."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janar",
+      "shkurt",
+      "mars",
+      "prill",
+      "maj",
+      "qershor",
+      "korrik",
+      "gusht",
+      "shtator",
+      "tetor",
+      "n\u00ebntor",
+      "dhjetor"
+    ],
+    "SHORTDAY": [
+      "Die",
+      "H\u00ebn",
+      "Mar",
+      "M\u00ebr",
+      "Enj",
+      "Pre",
+      "Sht"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Shk",
+      "Mar",
+      "Pri",
+      "Maj",
+      "Qer",
+      "Kor",
+      "Gsh",
+      "Sht",
+      "Tet",
+      "N\u00ebn",
+      "Dhj"
+    ],
+    "STANDALONEMONTH": [
+      "Janar",
+      "Shkurt",
+      "Mars",
+      "Prill",
+      "Maj",
+      "Qershor",
+      "Korrik",
+      "Gusht",
+      "Shtator",
+      "Tetor",
+      "N\u00ebntor",
+      "Dhjetor"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy HH:mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sq-xk",
+  "localeID": "sq_XK",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq.js
new file mode 100644
index 0000000..c39b126
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sq.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "paradite",
+      "pasdite"
+    ],
+    "DAY": [
+      "e diel",
+      "e h\u00ebn\u00eb",
+      "e mart\u00eb",
+      "e m\u00ebrkur\u00eb",
+      "e enjte",
+      "e premte",
+      "e shtun\u00eb"
+    ],
+    "ERANAMES": [
+      "para er\u00ebs s\u00eb re",
+      "er\u00ebs s\u00eb re"
+    ],
+    "ERAS": [
+      "p.e.r.",
+      "e.r."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "janar",
+      "shkurt",
+      "mars",
+      "prill",
+      "maj",
+      "qershor",
+      "korrik",
+      "gusht",
+      "shtator",
+      "tetor",
+      "n\u00ebntor",
+      "dhjetor"
+    ],
+    "SHORTDAY": [
+      "Die",
+      "H\u00ebn",
+      "Mar",
+      "M\u00ebr",
+      "Enj",
+      "Pre",
+      "Sht"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Shk",
+      "Mar",
+      "Pri",
+      "Maj",
+      "Qer",
+      "Kor",
+      "Gsh",
+      "Sht",
+      "Tet",
+      "N\u00ebn",
+      "Dhj"
+    ],
+    "STANDALONEMONTH": [
+      "Janar",
+      "Shkurt",
+      "Mars",
+      "Prill",
+      "Maj",
+      "Qershor",
+      "Korrik",
+      "Gusht",
+      "Shtator",
+      "Tetor",
+      "N\u00ebntor",
+      "Dhjetor"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy HH:mm",
+    "shortDate": "d.M.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Lek",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sq",
+  "localeID": "sq",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-ba.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-ba.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-ba.js
new file mode 100644
index 0000000..9db5486
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sr-cyrl-ba.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+      "\u043f\u043e \u043f\u043e\u0434\u043d\u0435"
+    ],
+    "DAY": [
+      "\u043d\u0435\u0434\u0435\u0459\u0430",
+      "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+      "\u0443\u0442\u043e\u0440\u0430\u043a",
+      "\u0441\u0440\u0435\u0434\u0430",
+      "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+      "\u043f\u0435\u0442\u0430\u043a",
+      "\u0441\u0443\u0431\u043e\u0442\u0430"
+    ],
+    "ERANAMES": [
+      "\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435",
+      "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"
+    ],
+    "ERAS": [
+      "\u043f. \u043d. \u0435.",
+      "\u043d. \u0435."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "SHORTDAY": [
+      "\u043d\u0435\u0434",
+      "\u043f\u043e\u043d",
+      "\u0443\u0442\u043e",
+      "\u0441\u0440\u0435",
+      "\u0447\u0435\u0442",
+      "\u043f\u0435\u0442",
+      "\u0441\u0443\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u0458\u0430\u043d",
+      "\u0444\u0435\u0431",
+      "\u043c\u0430\u0440",
+      "\u0430\u043f\u0440",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433",
+      "\u0441\u0435\u043f",
+      "\u043e\u043a\u0442",
+      "\u043d\u043e\u0432",
+      "\u0434\u0435\u0446"
+    ],
+    "STANDALONEMONTH": [
+      "\u0458\u0430\u043d\u0443\u0430\u0440",
+      "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0438\u043b",
+      "\u043c\u0430\u0458",
+      "\u0458\u0443\u043d",
+      "\u0458\u0443\u043b",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+      "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+      "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+      "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, dd. MMMM y.",
+    "longDate": "dd. MMMM y.",
+    "medium": "dd.MM.y. HH:mm:ss",
+    "mediumDate": "dd.MM.y.",
+    "mediumTime": "HH:mm:ss",
+    "short": "d.M.yy. HH:mm",
+    "shortDate": "d.M.yy.",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KM",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "sr-cyrl-ba",
+  "localeID": "sr_Cyrl_BA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && i % 10 == 1 && i % 100 != 11 || vf.f % 10 == 1 && vf.f % 100 != 11) {    return PLURAL_CATEGORY.ONE;  }  if (vf.v == 0 && i % 10 >= 2 && i % 10 <= 4 && (i % 100 < 12 || i % 100 > 14) || vf.f % 10 >= 2 && vf.f % 10 <= 4 && (vf.f % 100 < 12 || vf.f % 100 > 14)) {    return PLURAL_CATEGORY.FEW;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[06/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-cd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-cd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-cd.js
new file mode 100644
index 0000000..5fbbd34
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-cd.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ya asubuyi",
+      "ya muchana"
+    ],
+    "DAY": [
+      "siku ya yenga",
+      "siku ya kwanza",
+      "siku ya pili",
+      "siku ya tatu",
+      "siku ya ine",
+      "siku ya tanu",
+      "siku ya sita"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristo",
+      "Baada ya Kristo"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "mwezi ya kwanja",
+      "mwezi ya pili",
+      "mwezi ya tatu",
+      "mwezi ya ine",
+      "mwezi ya tanu",
+      "mwezi ya sita",
+      "mwezi ya saba",
+      "mwezi ya munane",
+      "mwezi ya tisa",
+      "mwezi ya kumi",
+      "mwezi ya kumi na moya",
+      "mwezi ya kumi ya mbili"
+    ],
+    "SHORTDAY": [
+      "yen",
+      "kwa",
+      "pil",
+      "tat",
+      "ine",
+      "tan",
+      "sit"
+    ],
+    "SHORTMONTH": [
+      "mkw",
+      "mpi",
+      "mtu",
+      "min",
+      "mtn",
+      "mst",
+      "msb",
+      "mun",
+      "mts",
+      "mku",
+      "mkm",
+      "mkb"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sw-cd",
+  "localeID": "sw_CD",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ke.js
new file mode 100644
index 0000000..ed521a0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristo",
+      "Baada ya Kristo"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sw-ke",
+  "localeID": "sw_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-tz.js
new file mode 100644
index 0000000..9e0d097
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristo",
+      "Baada ya Kristo"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sw-tz",
+  "localeID": "sw_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ug.js
new file mode 100644
index 0000000..10a9210
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw-ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristo",
+      "Baada ya Kristo"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sw-ug",
+  "localeID": "sw_UG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw.js
new file mode 100644
index 0000000..f6ed28c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_sw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Kristo",
+      "Baada ya Kristo"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jumapili",
+      "Jumatatu",
+      "Jumanne",
+      "Jumatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumamosi"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januari",
+      "Februari",
+      "Machi",
+      "Aprili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "sw",
+  "localeID": "sw",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc-cd.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc-cd.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc-cd.js
new file mode 100644
index 0000000..4e51c15
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc-cd.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ya asubuyi",
+      "ya muchana"
+    ],
+    "DAY": [
+      "siku ya yenga",
+      "siku ya kwanza",
+      "siku ya pili",
+      "siku ya tatu",
+      "siku ya ine",
+      "siku ya tanu",
+      "siku ya sita"
+    ],
+    "ERANAMES": [
+      "mbele ya Yezu Kristo",
+      "kisha ya Yezu Kristo"
+    ],
+    "ERAS": [
+      "mbele ya Y",
+      "kisha ya Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "mwezi ya kwanja",
+      "mwezi ya pili",
+      "mwezi ya tatu",
+      "mwezi ya ine",
+      "mwezi ya tanu",
+      "mwezi ya sita",
+      "mwezi ya saba",
+      "mwezi ya munane",
+      "mwezi ya tisa",
+      "mwezi ya kumi",
+      "mwezi ya kumi na moya",
+      "mwezi ya kumi ya mbili"
+    ],
+    "SHORTDAY": [
+      "yen",
+      "kwa",
+      "pil",
+      "tat",
+      "ine",
+      "tan",
+      "sit"
+    ],
+    "SHORTMONTH": [
+      "mkw",
+      "mpi",
+      "mtu",
+      "min",
+      "mtn",
+      "mst",
+      "msb",
+      "mun",
+      "mts",
+      "mku",
+      "mkm",
+      "mkb"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "swc-cd",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc.js
new file mode 100644
index 0000000..5390f3b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_swc.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "ya asubuyi",
+      "ya muchana"
+    ],
+    "DAY": [
+      "siku ya yenga",
+      "siku ya kwanza",
+      "siku ya pili",
+      "siku ya tatu",
+      "siku ya ine",
+      "siku ya tanu",
+      "siku ya sita"
+    ],
+    "ERANAMES": [
+      "mbele ya Yezu Kristo",
+      "kisha ya Yezu Kristo"
+    ],
+    "ERAS": [
+      "mbele ya Y",
+      "kisha ya Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "mwezi ya kwanja",
+      "mwezi ya pili",
+      "mwezi ya tatu",
+      "mwezi ya ine",
+      "mwezi ya tanu",
+      "mwezi ya sita",
+      "mwezi ya saba",
+      "mwezi ya munane",
+      "mwezi ya tisa",
+      "mwezi ya kumi",
+      "mwezi ya kumi na moya",
+      "mwezi ya kumi ya mbili"
+    ],
+    "SHORTDAY": [
+      "yen",
+      "kwa",
+      "pil",
+      "tat",
+      "ine",
+      "tan",
+      "sit"
+    ],
+    "SHORTMONTH": [
+      "mkw",
+      "mpi",
+      "mtu",
+      "min",
+      "mtn",
+      "mst",
+      "msb",
+      "mun",
+      "mts",
+      "mku",
+      "mkm",
+      "mkb"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FrCD",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "swc",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-in.js
new file mode 100644
index 0000000..0d6ba57
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd",
+      "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd"
+    ],
+    "DAY": [
+      "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
+      "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
+      "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd",
+      "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
+      "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd",
+      "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf",
+      "\u0b9a\u0ba9\u0bbf"
+    ],
+    "ERANAMES": [
+      "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd",
+      "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf"
+    ],
+    "ERAS": [
+      "\u0b95\u0bbf.\u0bae\u0bc1.",
+      "\u0b95\u0bbf.\u0baa\u0bbf."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "SHORTDAY": [
+      "\u0b9e\u0bbe",
+      "\u0ba4\u0bbf",
+      "\u0b9a\u0bc6",
+      "\u0baa\u0bc1",
+      "\u0bb5\u0bbf",
+      "\u0bb5\u0bc6",
+      "\u0b9a"
+    ],
+    "SHORTMONTH": [
+      "\u0b9c\u0ba9.",
+      "\u0baa\u0bbf\u0baa\u0bcd.",
+      "\u0bae\u0bbe\u0bb0\u0bcd.",
+      "\u0b8f\u0baa\u0bcd.",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95.",
+      "\u0b9a\u0bc6\u0baa\u0bcd.",
+      "\u0b85\u0b95\u0bcd.",
+      "\u0ba8\u0bb5.",
+      "\u0b9f\u0bbf\u0b9a."
+    ],
+    "STANDALONEMONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bc1",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ta-in",
+  "localeID": "ta_IN",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-lk.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-lk.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-lk.js
new file mode 100644
index 0000000..db3fd13
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-lk.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd",
+      "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd"
+    ],
+    "DAY": [
+      "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
+      "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
+      "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd",
+      "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
+      "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd",
+      "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf",
+      "\u0b9a\u0ba9\u0bbf"
+    ],
+    "ERANAMES": [
+      "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd",
+      "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf"
+    ],
+    "ERAS": [
+      "\u0b95\u0bbf.\u0bae\u0bc1.",
+      "\u0b95\u0bbf.\u0baa\u0bbf."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "SHORTDAY": [
+      "\u0b9e\u0bbe",
+      "\u0ba4\u0bbf",
+      "\u0b9a\u0bc6",
+      "\u0baa\u0bc1",
+      "\u0bb5\u0bbf",
+      "\u0bb5\u0bc6",
+      "\u0b9a"
+    ],
+    "SHORTMONTH": [
+      "\u0b9c\u0ba9.",
+      "\u0baa\u0bbf\u0baa\u0bcd.",
+      "\u0bae\u0bbe\u0bb0\u0bcd.",
+      "\u0b8f\u0baa\u0bcd.",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95.",
+      "\u0b9a\u0bc6\u0baa\u0bcd.",
+      "\u0b85\u0b95\u0bcd.",
+      "\u0ba8\u0bb5.",
+      "\u0b9f\u0bbf\u0b9a."
+    ],
+    "STANDALONEMONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bc1",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Rs",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ta-lk",
+  "localeID": "ta_LK",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-my.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-my.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-my.js
new file mode 100644
index 0000000..1bb2da9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-my.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd",
+      "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd"
+    ],
+    "DAY": [
+      "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
+      "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
+      "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd",
+      "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
+      "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd",
+      "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf",
+      "\u0b9a\u0ba9\u0bbf"
+    ],
+    "ERANAMES": [
+      "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd",
+      "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf"
+    ],
+    "ERAS": [
+      "\u0b95\u0bbf.\u0bae\u0bc1.",
+      "\u0b95\u0bbf.\u0baa\u0bbf."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "SHORTDAY": [
+      "\u0b9e\u0bbe",
+      "\u0ba4\u0bbf",
+      "\u0b9a\u0bc6",
+      "\u0baa\u0bc1",
+      "\u0bb5\u0bbf",
+      "\u0bb5\u0bc6",
+      "\u0b9a"
+    ],
+    "SHORTMONTH": [
+      "\u0b9c\u0ba9.",
+      "\u0baa\u0bbf\u0baa\u0bcd.",
+      "\u0bae\u0bbe\u0bb0\u0bcd.",
+      "\u0b8f\u0baa\u0bcd.",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95.",
+      "\u0b9a\u0bc6\u0baa\u0bcd.",
+      "\u0b85\u0b95\u0bcd.",
+      "\u0ba8\u0bb5.",
+      "\u0b9f\u0bbf\u0b9a."
+    ],
+    "STANDALONEMONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bc1",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "RM",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ta-my",
+  "localeID": "ta_MY",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-sg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-sg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-sg.js
new file mode 100644
index 0000000..b049d9b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta-sg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd",
+      "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd"
+    ],
+    "DAY": [
+      "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
+      "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
+      "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd",
+      "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
+      "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd",
+      "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf",
+      "\u0b9a\u0ba9\u0bbf"
+    ],
+    "ERANAMES": [
+      "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd",
+      "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf"
+    ],
+    "ERAS": [
+      "\u0b95\u0bbf.\u0bae\u0bc1.",
+      "\u0b95\u0bbf.\u0baa\u0bbf."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "SHORTDAY": [
+      "\u0b9e\u0bbe",
+      "\u0ba4\u0bbf",
+      "\u0b9a\u0bc6",
+      "\u0baa\u0bc1",
+      "\u0bb5\u0bbf",
+      "\u0bb5\u0bc6",
+      "\u0b9a"
+    ],
+    "SHORTMONTH": [
+      "\u0b9c\u0ba9.",
+      "\u0baa\u0bbf\u0baa\u0bcd.",
+      "\u0bae\u0bbe\u0bb0\u0bcd.",
+      "\u0b8f\u0baa\u0bcd.",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95.",
+      "\u0b9a\u0bc6\u0baa\u0bcd.",
+      "\u0b85\u0b95\u0bcd.",
+      "\u0ba8\u0bb5.",
+      "\u0b9f\u0bbf\u0b9a."
+    ],
+    "STANDALONEMONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bc1",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ta-sg",
+  "localeID": "ta_SG",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta.js
new file mode 100644
index 0000000..affb1b7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ta.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0bae\u0bc1\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd",
+      "\u0baa\u0bbf\u0bb1\u0bcd\u0baa\u0b95\u0bb2\u0bcd"
+    ],
+    "DAY": [
+      "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
+      "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
+      "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd",
+      "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
+      "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd",
+      "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf",
+      "\u0b9a\u0ba9\u0bbf"
+    ],
+    "ERANAMES": [
+      "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd",
+      "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf"
+    ],
+    "ERAS": [
+      "\u0b95\u0bbf.\u0bae\u0bc1.",
+      "\u0b95\u0bbf.\u0baa\u0bbf."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "SHORTDAY": [
+      "\u0b9e\u0bbe",
+      "\u0ba4\u0bbf",
+      "\u0b9a\u0bc6",
+      "\u0baa\u0bc1",
+      "\u0bb5\u0bbf",
+      "\u0bb5\u0bc6",
+      "\u0b9a"
+    ],
+    "SHORTMONTH": [
+      "\u0b9c\u0ba9.",
+      "\u0baa\u0bbf\u0baa\u0bcd.",
+      "\u0bae\u0bbe\u0bb0\u0bcd.",
+      "\u0b8f\u0baa\u0bcd.",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95.",
+      "\u0b9a\u0bc6\u0baa\u0bcd.",
+      "\u0b85\u0b95\u0bcd.",
+      "\u0ba8\u0bb5.",
+      "\u0b9f\u0bbf\u0b9a."
+    ],
+    "STANDALONEMONTH": [
+      "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+      "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+      "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+      "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+      "\u0bae\u0bc7",
+      "\u0b9c\u0bc2\u0ba9\u0bcd",
+      "\u0b9c\u0bc2\u0bb2\u0bc8",
+      "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bc1",
+      "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+      "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+      "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM, y",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d-M-yy h:mm a",
+    "shortDate": "d-M-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ta",
+  "localeID": "ta",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te-in.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te-in.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te-in.js
new file mode 100644
index 0000000..b912a94
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te-in.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "[AM]",
+      "[PM]"
+    ],
+    "DAY": [
+      "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"
+    ],
+    "ERANAMES": [
+      "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c02",
+      "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c36\u0c15\u0c02"
+    ],
+    "ERAS": [
+      "\u0c15\u0c4d\u0c30\u0c40\u0c2a\u0c42",
+      "\u0c15\u0c4d\u0c30\u0c40\u0c36"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0c1c\u0c28\u0c35\u0c30\u0c3f",
+      "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f",
+      "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+      "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d",
+      "\u0c2e\u0c47",
+      "\u0c1c\u0c42\u0c28\u0c4d",
+      "\u0c1c\u0c41\u0c32\u0c48",
+      "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+      "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+      "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+    ],
+    "SHORTDAY": [
+      "\u0c06\u0c26\u0c3f",
+      "\u0c38\u0c4b\u0c2e",
+      "\u0c2e\u0c02\u0c17\u0c33",
+      "\u0c2c\u0c41\u0c27",
+      "\u0c17\u0c41\u0c30\u0c41",
+      "\u0c36\u0c41\u0c15\u0c4d\u0c30",
+      "\u0c36\u0c28\u0c3f"
+    ],
+    "SHORTMONTH": [
+      "\u0c1c\u0c28",
+      "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30",
+      "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+      "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f",
+      "\u0c2e\u0c47",
+      "\u0c1c\u0c42\u0c28\u0c4d",
+      "\u0c1c\u0c41\u0c32\u0c48",
+      "\u0c06\u0c17",
+      "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02",
+      "\u0c05\u0c15\u0c4d\u0c1f\u0c4b",
+      "\u0c28\u0c35\u0c02",
+      "\u0c21\u0c3f\u0c38\u0c46\u0c02"
+    ],
+    "STANDALONEMONTH": [
+      "\u0c1c\u0c28\u0c35\u0c30\u0c3f",
+      "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f",
+      "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+      "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d",
+      "\u0c2e\u0c47",
+      "\u0c1c\u0c42\u0c28\u0c4d",
+      "\u0c1c\u0c41\u0c32\u0c48",
+      "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+      "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+      "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "d, MMMM y, EEEE",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd-MM-yy h:mm a",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "te-in",
+  "localeID": "te_IN",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te.js
new file mode 100644
index 0000000..8011dd4
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_te.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "[AM]",
+      "[PM]"
+    ],
+    "DAY": [
+      "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02",
+      "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"
+    ],
+    "ERANAMES": [
+      "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c02",
+      "\u0c15\u0c4d\u0c30\u0c40\u0c38\u0c4d\u0c24\u0c41 \u0c36\u0c15\u0c02"
+    ],
+    "ERAS": [
+      "\u0c15\u0c4d\u0c30\u0c40\u0c2a\u0c42",
+      "\u0c15\u0c4d\u0c30\u0c40\u0c36"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0c1c\u0c28\u0c35\u0c30\u0c3f",
+      "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f",
+      "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+      "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d",
+      "\u0c2e\u0c47",
+      "\u0c1c\u0c42\u0c28\u0c4d",
+      "\u0c1c\u0c41\u0c32\u0c48",
+      "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+      "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+      "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+    ],
+    "SHORTDAY": [
+      "\u0c06\u0c26\u0c3f",
+      "\u0c38\u0c4b\u0c2e",
+      "\u0c2e\u0c02\u0c17\u0c33",
+      "\u0c2c\u0c41\u0c27",
+      "\u0c17\u0c41\u0c30\u0c41",
+      "\u0c36\u0c41\u0c15\u0c4d\u0c30",
+      "\u0c36\u0c28\u0c3f"
+    ],
+    "SHORTMONTH": [
+      "\u0c1c\u0c28",
+      "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30",
+      "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+      "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f",
+      "\u0c2e\u0c47",
+      "\u0c1c\u0c42\u0c28\u0c4d",
+      "\u0c1c\u0c41\u0c32\u0c48",
+      "\u0c06\u0c17",
+      "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02",
+      "\u0c05\u0c15\u0c4d\u0c1f\u0c4b",
+      "\u0c28\u0c35\u0c02",
+      "\u0c21\u0c3f\u0c38\u0c46\u0c02"
+    ],
+    "STANDALONEMONTH": [
+      "\u0c1c\u0c28\u0c35\u0c30\u0c3f",
+      "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f",
+      "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+      "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d",
+      "\u0c2e\u0c47",
+      "\u0c1c\u0c42\u0c28\u0c4d",
+      "\u0c1c\u0c41\u0c32\u0c48",
+      "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+      "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+      "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+      "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "d, MMMM y, EEEE",
+    "longDate": "d MMMM, y",
+    "medium": "d MMM, y h:mm:ss a",
+    "mediumDate": "d MMM, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd-MM-yy h:mm a",
+    "shortDate": "dd-MM-yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "te",
+  "localeID": "te",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ke.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ke.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ke.js
new file mode 100644
index 0000000..c4d30f9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ke.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Taparachu",
+      "Ebongi"
+    ],
+    "DAY": [
+      "Nakaejuma",
+      "Nakaebarasa",
+      "Nakaare",
+      "Nakauni",
+      "Nakaung\u2019on",
+      "Nakakany",
+      "Nakasabiti"
+    ],
+    "ERANAMES": [
+      "Kabla ya Christo",
+      "Baada ya Christo"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Orara",
+      "Omuk",
+      "Okwamg\u2019",
+      "Odung\u2019el",
+      "Omaruk",
+      "Omodok\u2019king\u2019ol",
+      "Ojola",
+      "Opedel",
+      "Osokosokoma",
+      "Otibar",
+      "Olabor",
+      "Opoo"
+    ],
+    "SHORTDAY": [
+      "Jum",
+      "Bar",
+      "Aar",
+      "Uni",
+      "Ung",
+      "Kan",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Rar",
+      "Muk",
+      "Kwa",
+      "Dun",
+      "Mar",
+      "Mod",
+      "Jol",
+      "Ped",
+      "Sok",
+      "Tib",
+      "Lab",
+      "Poo"
+    ],
+    "STANDALONEMONTH": [
+      "Orara",
+      "Omuk",
+      "Okwamg\u2019",
+      "Odung\u2019el",
+      "Omaruk",
+      "Omodok\u2019king\u2019ol",
+      "Ojola",
+      "Opedel",
+      "Osokosokoma",
+      "Otibar",
+      "Olabor",
+      "Opoo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Ksh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "teo-ke",
+  "localeID": "teo_KE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ug.js
new file mode 100644
index 0000000..bfa1f2a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo-ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Taparachu",
+      "Ebongi"
+    ],
+    "DAY": [
+      "Nakaejuma",
+      "Nakaebarasa",
+      "Nakaare",
+      "Nakauni",
+      "Nakaung\u2019on",
+      "Nakakany",
+      "Nakasabiti"
+    ],
+    "ERANAMES": [
+      "Kabla ya Christo",
+      "Baada ya Christo"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Orara",
+      "Omuk",
+      "Okwamg\u2019",
+      "Odung\u2019el",
+      "Omaruk",
+      "Omodok\u2019king\u2019ol",
+      "Ojola",
+      "Opedel",
+      "Osokosokoma",
+      "Otibar",
+      "Olabor",
+      "Opoo"
+    ],
+    "SHORTDAY": [
+      "Jum",
+      "Bar",
+      "Aar",
+      "Uni",
+      "Ung",
+      "Kan",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Rar",
+      "Muk",
+      "Kwa",
+      "Dun",
+      "Mar",
+      "Mod",
+      "Jol",
+      "Ped",
+      "Sok",
+      "Tib",
+      "Lab",
+      "Poo"
+    ],
+    "STANDALONEMONTH": [
+      "Orara",
+      "Omuk",
+      "Okwamg\u2019",
+      "Odung\u2019el",
+      "Omaruk",
+      "Omodok\u2019king\u2019ol",
+      "Ojola",
+      "Opedel",
+      "Osokosokoma",
+      "Otibar",
+      "Olabor",
+      "Opoo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "teo-ug",
+  "localeID": "teo_UG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo.js
new file mode 100644
index 0000000..80c2663
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_teo.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Taparachu",
+      "Ebongi"
+    ],
+    "DAY": [
+      "Nakaejuma",
+      "Nakaebarasa",
+      "Nakaare",
+      "Nakauni",
+      "Nakaung\u2019on",
+      "Nakakany",
+      "Nakasabiti"
+    ],
+    "ERANAMES": [
+      "Kabla ya Christo",
+      "Baada ya Christo"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Orara",
+      "Omuk",
+      "Okwamg\u2019",
+      "Odung\u2019el",
+      "Omaruk",
+      "Omodok\u2019king\u2019ol",
+      "Ojola",
+      "Opedel",
+      "Osokosokoma",
+      "Otibar",
+      "Olabor",
+      "Opoo"
+    ],
+    "SHORTDAY": [
+      "Jum",
+      "Bar",
+      "Aar",
+      "Uni",
+      "Ung",
+      "Kan",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Rar",
+      "Muk",
+      "Kwa",
+      "Dun",
+      "Mar",
+      "Mod",
+      "Jol",
+      "Ped",
+      "Sok",
+      "Tib",
+      "Lab",
+      "Poo"
+    ],
+    "STANDALONEMONTH": [
+      "Orara",
+      "Omuk",
+      "Okwamg\u2019",
+      "Odung\u2019el",
+      "Omaruk",
+      "Omodok\u2019king\u2019ol",
+      "Ojola",
+      "Opedel",
+      "Osokosokoma",
+      "Otibar",
+      "Olabor",
+      "Opoo"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "teo",
+  "localeID": "teo",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl-tj.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl-tj.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl-tj.js
new file mode 100644
index 0000000..c25e8f7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl-tj.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0435. \u0447\u043e.",
+      "\u043f\u0430. \u0447\u043e."
+    ],
+    "DAY": [
+      "\u042f\u043a\u0448\u0430\u043d\u0431\u0435",
+      "\u0414\u0443\u0448\u0430\u043d\u0431\u0435",
+      "\u0421\u0435\u0448\u0430\u043d\u0431\u0435",
+      "\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0435",
+      "\u041f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435",
+      "\u04b6\u0443\u043c\u044a\u0430",
+      "\u0428\u0430\u043d\u0431\u0435"
+    ],
+    "MONTH": [
+      "\u042f\u043d\u0432\u0430\u0440",
+      "\u0424\u0435\u0432\u0440\u0430\u043b",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440",
+      "\u041e\u043a\u0442\u044f\u0431\u0440",
+      "\u041d\u043e\u044f\u0431\u0440",
+      "\u0414\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "SHORTDAY": [
+      "\u042f\u0448\u0431",
+      "\u0414\u0448\u0431",
+      "\u0421\u0448\u0431",
+      "\u0427\u0448\u0431",
+      "\u041f\u0448\u0431",
+      "\u04b6\u043c\u044a",
+      "\u0428\u043d\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u042f\u043d\u0432",
+      "\u0424\u0435\u0432",
+      "\u041c\u0430\u0440",
+      "\u0410\u043f\u0440",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433",
+      "\u0421\u0435\u043d",
+      "\u041e\u043a\u0442",
+      "\u041d\u043e\u044f",
+      "\u0414\u0435\u043a"
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Som",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tg-cyrl-tj",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl.js
new file mode 100644
index 0000000..7c0b60f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg-cyrl.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0435. \u0447\u043e.",
+      "\u043f\u0430. \u0447\u043e."
+    ],
+    "DAY": [
+      "\u042f\u043a\u0448\u0430\u043d\u0431\u0435",
+      "\u0414\u0443\u0448\u0430\u043d\u0431\u0435",
+      "\u0421\u0435\u0448\u0430\u043d\u0431\u0435",
+      "\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0435",
+      "\u041f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435",
+      "\u04b6\u0443\u043c\u044a\u0430",
+      "\u0428\u0430\u043d\u0431\u0435"
+    ],
+    "MONTH": [
+      "\u042f\u043d\u0432\u0430\u0440",
+      "\u0424\u0435\u0432\u0440\u0430\u043b",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440",
+      "\u041e\u043a\u0442\u044f\u0431\u0440",
+      "\u041d\u043e\u044f\u0431\u0440",
+      "\u0414\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "SHORTDAY": [
+      "\u042f\u0448\u0431",
+      "\u0414\u0448\u0431",
+      "\u0421\u0448\u0431",
+      "\u0427\u0448\u0431",
+      "\u041f\u0448\u0431",
+      "\u04b6\u043c\u044a",
+      "\u0428\u043d\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u042f\u043d\u0432",
+      "\u0424\u0435\u0432",
+      "\u041c\u0430\u0440",
+      "\u0410\u043f\u0440",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433",
+      "\u0421\u0435\u043d",
+      "\u041e\u043a\u0442",
+      "\u041d\u043e\u044f",
+      "\u0414\u0435\u043a"
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tg-cyrl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg.js
new file mode 100644
index 0000000..6a15c5c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tg.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u043f\u0435. \u0447\u043e.",
+      "\u043f\u0430. \u0447\u043e."
+    ],
+    "DAY": [
+      "\u042f\u043a\u0448\u0430\u043d\u0431\u0435",
+      "\u0414\u0443\u0448\u0430\u043d\u0431\u0435",
+      "\u0421\u0435\u0448\u0430\u043d\u0431\u0435",
+      "\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0435",
+      "\u041f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435",
+      "\u04b6\u0443\u043c\u044a\u0430",
+      "\u0428\u0430\u043d\u0431\u0435"
+    ],
+    "MONTH": [
+      "\u042f\u043d\u0432\u0430\u0440",
+      "\u0424\u0435\u0432\u0440\u0430\u043b",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440",
+      "\u041e\u043a\u0442\u044f\u0431\u0440",
+      "\u041d\u043e\u044f\u0431\u0440",
+      "\u0414\u0435\u043a\u0430\u0431\u0440"
+    ],
+    "SHORTDAY": [
+      "\u042f\u0448\u0431",
+      "\u0414\u0448\u0431",
+      "\u0421\u0448\u0431",
+      "\u0427\u0448\u0431",
+      "\u041f\u0448\u0431",
+      "\u04b6\u043c\u044a",
+      "\u0428\u043d\u0431"
+    ],
+    "SHORTMONTH": [
+      "\u042f\u043d\u0432",
+      "\u0424\u0435\u0432",
+      "\u041c\u0430\u0440",
+      "\u0410\u043f\u0440",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d",
+      "\u0418\u044e\u043b",
+      "\u0410\u0432\u0433",
+      "\u0421\u0435\u043d",
+      "\u041e\u043a\u0442",
+      "\u041d\u043e\u044f",
+      "\u0414\u0435\u043a"
+    ],
+    "fullDate": "EEEE, y MMMM dd",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "yy/MM/dd HH:mm",
+    "shortDate": "yy/MM/dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Som",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4\u00a0-",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tg",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th-th.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th-th.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th-th.js
new file mode 100644
index 0000000..6918c56
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th-th.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07",
+      "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"
+    ],
+    "DAY": [
+      "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c",
+      "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c",
+      "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23",
+      "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18",
+      "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35",
+      "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c",
+      "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"
+    ],
+    "ERANAMES": [
+      "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a",
+      "\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a"
+    ],
+    "ERAS": [
+      "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19 \u0e04.\u0e28.",
+      "\u0e04.\u0e28."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
+      "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
+      "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21",
+      "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
+      "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
+      "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19",
+      "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21",
+      "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21",
+      "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19",
+      "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21",
+      "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19",
+      "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"
+    ],
+    "SHORTDAY": [
+      "\u0e2d\u0e32.",
+      "\u0e08.",
+      "\u0e2d.",
+      "\u0e1e.",
+      "\u0e1e\u0e24.",
+      "\u0e28.",
+      "\u0e2a."
+    ],
+    "SHORTMONTH": [
+      "\u0e21.\u0e04.",
+      "\u0e01.\u0e1e.",
+      "\u0e21\u0e35.\u0e04.",
+      "\u0e40\u0e21.\u0e22.",
+      "\u0e1e.\u0e04.",
+      "\u0e21\u0e34.\u0e22.",
+      "\u0e01.\u0e04.",
+      "\u0e2a.\u0e04.",
+      "\u0e01.\u0e22.",
+      "\u0e15.\u0e04.",
+      "\u0e1e.\u0e22.",
+      "\u0e18.\u0e04."
+    ],
+    "STANDALONEMONTH": [
+      "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
+      "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
+      "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21",
+      "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
+      "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
+      "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19",
+      "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21",
+      "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21",
+      "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19",
+      "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21",
+      "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19",
+      "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y",
+    "longDate": "d MMMM G y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u0e3f",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "th-th",
+  "localeID": "th_TH",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[40/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-scenario.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-scenario.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-scenario.js
new file mode 100644
index 0000000..20af805
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-scenario.js
@@ -0,0 +1,41849 @@
+/*!
+ * jQuery JavaScript Library v2.1.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-05-01T17:11Z
+ */
+
+(function( global, factory ) {'use strict';
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+		// For CommonJS and CommonJS-like environments where a proper window is present,
+		// execute the factory and get jQuery
+		// For environments that do not inherently posses a window with a document
+		// (such as Node.js), expose a jQuery-making factory as module.exports
+		// This accentuates the need for the creation of a real window
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//
+
+var arr = [];
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+
+	version = "2.1.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android<4.1
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray,
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
+	},
+
+	isPlainObject: function( obj ) {
+		// Not plain objects:
+		// - Any object or value whose internal [[Class]] property is not "[object Object]"
+		// - DOM nodes
+		// - window
+		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		if ( obj.constructor &&
+				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+			return false;
+		}
+
+		// If the function hasn't returned already, we're confident that
+		// |obj| is a plain object, created by {} or constructed with new Object
+		return true;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+		// Support: Android < 4.0, iOS < 6 (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		var script,
+			indirect = eval;
+
+		code = jQuery.trim( code );
+
+		if ( code ) {
+			// If the code includes a valid, prologue position
+			// strict mode pragma, execute code by injecting a
+			// script tag into the document.
+			if ( code.indexOf("use strict") === 1 ) {
+				script = document.createElement("script");
+				script.text = code;
+				document.head.appendChild( script ).parentNode.removeChild( script );
+			} else {
+			// Otherwise, avoid the DOM node creation, insertion
+			// and removal by using an indirect global eval
+				indirect( code );
+			}
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android<4.1
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v1.10.19
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-04-18
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + characterEncoding + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+	rescape = /'|\\/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( documentIsHTML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document (jQuery #6963)
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, context.getElementsByTagName( selector ) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+				push.apply( results, context.getElementsByClassName( m ) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+			nid = old = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return !!fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( div.parentNode ) {
+			div.parentNode.removeChild( div );
+		}
+		// release memory in IE
+		div = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = attrs.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			( ~b.sourceIndex || MAX_NEGATIVE ) -
+			( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== strundefined && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare,
+		doc = node ? node.ownerDocument || node : preferredDoc,
+		parent = doc.defaultView;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsHTML = !isXML( doc );
+
+	// Support: IE>8
+	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
+	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+	// IE6-8 do not support the defaultView property so parent will be undefined
+	if ( parent && parent !== parent.top ) {
+		// IE11 does not have attachEvent, so all must suffer
+		if ( parent.addEventListener ) {
+			parent.addEventListener( "unload", function() {
+				setDocument();
+			}, false );
+		} else if ( parent.attachEvent ) {
+			parent.attachEvent( "onunload", function() {
+				setDocument();
+			});
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+	support.attributes = assert(function( div ) {
+		div.className = "i";
+		return !div.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
+		div.innerHTML = "<div class='a'></div><div class='a i'></div>";
+
+		// Support: Safari<4
+		// Catch class over-caching
+		div.firstChild.className = "i";
+		// Support: Opera<10
+		// Catch gEBCN failure to find non-leading classes
+		return div.getElementsByClassName("i").length === 2;
+	});
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( div ) {
+		docElem.appendChild( div ).id = expando;
+		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See http://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( div.querySelectorAll("[msallowclip^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = doc.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			div.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( div.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (oldCache = outerCache[ dir ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							outerCache[ dir ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is no seed and only one group
+	if ( match.length === 1 ) {
+
+		// Take a shortcut and set the context if the root selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome<14
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+	// Should return 1, but returns 4 (following)
+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+	div.innerHTML = "<a href='#'></a>";
+	return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+	div.innerHTML = "<input/>";
+	div.firstChild.setAttribute( "value", "" );
+	return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+	return div.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			/* jshint -W018 */
+			return !!qualifier.call( elem, i, elem ) !== not;
+		});
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		});
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
+	});
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		}));
+};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i,
+			len = this.length,
+			ret = [],
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = this.selector ? this.selector + " " + selector : selector;
+		return ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], false) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], true) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+});
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	init = jQuery.fn.init = function( selector, context ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return typeof rootjQuery.ready !== "undefined" ?
+				rootjQuery.ready( selector ) :
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.extend({
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			truncate = until !== undefined;
+
+		while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
+			if ( elem.nodeType === 1 ) {
+				if ( truncate && jQuery( elem ).is( until ) ) {
+					break;
+				}
+				matched.push( elem );
+			}
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var matched = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				matched.push( n );
+			}
+		}
+
+		return matched;
+	}
+});
+
+jQuery.fn.extend({
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter(function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+				// Always skip document fragments
+				if ( cur.nodeType < 11 && (pos ?
+					pos.index(cur) > -1 :
+
+					// Don't pass non-elements to Sizzle
+					cur.nodeType === 1 &&
+						jQuery.find.matchesSelector(cur, selectors)) ) {
+
+					matched.push( cur );
+					break;
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.unique(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+function sibling( cur, dir ) {
+	while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.unique( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+});
+var rnotwhite = (/\S+/g);
+
+
+
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+		

<TRUNCATED>

[50/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/ProjectsAction.java
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/ProjectsAction.java b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/ProjectsAction.java
new file mode 100644
index 0000000..996d089
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/ProjectsAction.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package ${package}.actions.data;
+
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.convention.annotation.Result;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <code>List Apache projects.</code>
+ */
+@Result(type = "json")
+public class ProjectsAction extends ActionSupport {
+
+    private static final long serialVersionUID = 9037336532369476225L;
+    private static final Logger log = LogManager.getLogger(ProjectsAction.class);
+
+    private List<String> projectNames;
+
+    public String execute() throws Exception {
+
+        projectNames = new ArrayList<String>();
+        projectNames.add("Apache Struts");
+        projectNames.add("Apache Log4j");
+        projectNames.add("Apache Tomcat");
+        projectNames.add("Apache Maven");
+        projectNames.add("Apache Ant");
+        projectNames.add("Apache Log4Net");
+        projectNames.add("Apache Log4Cxx");
+        projectNames.add("Apache Chainsaw");
+        projectNames.add("Apache Incubator");
+        projectNames.add("Apache Hadoop");
+        projectNames.add("Apache OpenOffice");
+        projectNames.add("Apache Mahout");
+        projectNames.add("Apache Tapestry");
+        projectNames.add("Apache Jena");
+        projectNames.add("Apache Solr");
+        projectNames.add("Apache Cayenne");
+        projectNames.add("Apache OpenEJB");
+        projectNames.add("Apache Deltaspike");
+        projectNames.add("Apache Cordova");
+
+        log.debug("Return {} Apache projects", projectNames.size());
+
+        return SUCCESS;
+    }
+
+    public List<String> getProjectNames() {
+        return projectNames;
+    }
+}

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/package-info.java
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/package-info.java b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/package-info.java
new file mode 100644
index 0000000..3e4af32
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/java/actions/data/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+@ParentPackage("data")
+@Namespace("/data")
+package ${package}.actions.data;
+
+import org.apache.struts2.convention.annotation.Namespace;
+import org.apache.struts2.convention.annotation.ParentPackage;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/jshint.conf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/jshint.conf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/jshint.conf.js
new file mode 100644
index 0000000..91d3bb3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/jshint.conf.js
@@ -0,0 +1,13 @@
+{
+    "maxparams": 3,
+    "indent": true,
+    "camelcase": true,
+    "eqeqeq": true,
+    "forin": true,
+    "immed": true,
+    "latedef": false,
+    "noarg": true,
+    "noempty": true,
+    "nonew": true,
+    "globals": {}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/log4j2.xml b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..6d27d12
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Logger name="com.opensymphony.xwork2" level="info"/>
+        <Logger name="org.apache.struts2" level="info"/>
+        <Logger name="\${groupId}" level="debug"/>
+        <Root level="warn">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package.properties
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package.properties b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package.properties
new file mode 100644
index 0000000..b8ee61f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package.properties
@@ -0,0 +1 @@
+hello.message = Struts is up and running...

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package_es.properties
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package_es.properties b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package_es.properties
new file mode 100644
index 0000000..9f3bc40
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/package_es.properties
@@ -0,0 +1 @@
+hello.message = \u00A1Struts est\u00E1 bien\!...

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/struts.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/struts.xml b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/struts.xml
new file mode 100644
index 0000000..d11f2d8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/resources/struts.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE struts PUBLIC
+	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
+	"http://struts.apache.org/dtds/struts-2.5.dtd">
+<struts>
+
+  <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
+  <constant name="struts.devMode" value="true"/>
+
+  <constant name="struts.convention.default.parent.package" value="angularstruts"/>
+  <package name="angularstruts" extends="json-default">
+    <default-action-ref name="index" />
+  </package>
+  <package name="data" extends="angularstruts" namespace="/data"></package>
+
+</struts>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/content/index.jsp
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/content/index.jsp b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/content/index.jsp
new file mode 100644
index 0000000..3f6c374
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/content/index.jsp
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<html lang="en" ng-app="app">
+<head>
+    <meta charset="utf-8">
+    <title>My AngularJS Struts2 App</title>
+
+    <base href="<s:url forceAddSchemeHostAndPort="true" includeContext="true" value="/" namespace="/" />">
+</head>
+<body>
+
+<h2><s:property value="message"/></h2>
+
+<div>
+    <a href="/home">Home</a> - <a href="/projects">Projects</a>
+</div>
+
+<div ng-controller="AppController as app">
+    <div ng-view></div>
+</div>
+
+<s:if test="useMinifiedResources">
+    <script src="<s:url value="js/external.js" />"></script>
+    <script src="<s:url value="js/application.js" />"></script>
+</s:if>
+<s:else>
+    <script src="<s:url value="js/lib/angular/angular.min.js" />"></script>
+    <script src="<s:url value="js/lib/angular/angular-route.min.js" />"></script>
+    <script src="<s:url value="js/app.js" />"></script>
+    <script src="<s:url value="js/config.js" />"></script>
+    <script src="<s:url value="js/services/DataService.js" />"></script>
+    <script src="<s:url value="js/controllers/AppController.js" />"></script>
+    <script src="<s:url value="js/controllers/HomeController.js" />"></script>
+    <script src="<s:url value="js/controllers/ApacheProjectsController.js" />"></script>
+</s:else>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..8d08c0b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app id="struts_angularjs" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+    <display-name>Struts Blank AngularJS App</display-name>
+
+    <filter>
+        <filter-name>struts2</filter-name>
+        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>struts2</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+</web-app>

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/index.jsp b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/index.jsp
new file mode 100644
index 0000000..a81b87f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/index.jsp
@@ -0,0 +1 @@
+<% response.sendRedirect("index"); %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/app.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/app.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/app.js
new file mode 100644
index 0000000..6d2da17
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/app.js
@@ -0,0 +1,26 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+(function() {
+    'use strict';
+
+    angular
+        .module('app', ['ngRoute']);
+})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/config.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/config.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/config.js
new file mode 100644
index 0000000..9b93aab
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/config.js
@@ -0,0 +1,40 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+(function() {
+    'use strict';
+
+    angular
+    .module('app')
+        .config(['$routeProvider', '$locationProvider',
+            function($routeProvider, $locationProvider) {
+
+                $locationProvider.html5Mode(true).hashPrefix('!');
+
+                $routeProvider.when('/projects', {
+                    templateUrl: 'partials/projects.html',
+                    controller: 'ApacheProjectsController as vm'
+                }).when('/home', {
+                    templateUrl: 'partials/home.html',
+                    controller: 'HomeController as vm'
+                }).otherwise({ redirectTo: '/home' });
+            }
+        ]);
+})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/ApacheProjectsController.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/ApacheProjectsController.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/ApacheProjectsController.js
new file mode 100644
index 0000000..1fb0ca9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/ApacheProjectsController.js
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+(function() {
+    'use strict';
+
+    angular
+        .module('app')
+        .controller('ApacheProjectsController', ApacheProjectsController);
+
+    function ApacheProjectsController($log, DataService) {
+        var vm = this;
+
+        init();
+
+        function init() {
+            return DataService.getProjects().then(function(data) {
+                vm.projects = data.projectNames;
+                return vm.projects;
+            }, function() {
+                $log.error('Could not receive project names.');
+            });
+        }
+    }
+})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/AppController.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/AppController.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/AppController.js
new file mode 100644
index 0000000..d6de31a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/AppController.js
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+(function() {
+    'use strict';
+
+    angular
+        .module('app')
+        .controller('AppController', AppController);
+
+    function AppController() {
+
+    }
+})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/HomeController.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/HomeController.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/HomeController.js
new file mode 100644
index 0000000..44c7cf9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/controllers/HomeController.js
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+(function() {
+    'use strict';
+
+    angular
+        .module('app')
+        .controller('HomeController', HomeController);
+
+    function HomeController() {
+        var vm = this;
+        vm.name = "Sunshine";
+    }
+})();
\ No newline at end of file


[16/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks.js
new file mode 100644
index 0000000..7c64c70
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ks.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "\u0627\u064e\u062a\u06be\u0648\u0627\u0631",
+      "\u0698\u0654\u0646\u065b\u062f\u0631\u0655\u0631\u0648\u0627\u0631",
+      "\u0628\u0648\u065a\u0645\u0648\u0627\u0631",
+      "\u0628\u0648\u062f\u0648\u0627\u0631",
+      "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631",
+      "\u062c\u064f\u0645\u06c1",
+      "\u0628\u0679\u0648\u0627\u0631"
+    ],
+    "ERANAMES": [
+      "\u0642\u0628\u0655\u0644 \u0645\u0633\u06cc\u0656\u062d",
+      "\u0639\u06cc\u0656\u0633\u0648\u06cc \u0633\u0646\u06c1\u0655"
+    ],
+    "ERAS": [
+      "\u0628\u06cc \u0633\u06cc",
+      "\u0627\u06d2 \u0688\u06cc"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "SHORTDAY": [
+      "\u0622\u062a\u06be\u0648\u0627\u0631",
+      "\u0698\u0654\u0646\u065b\u062f\u0655\u0631\u0648\u0627\u0631",
+      "\u0628\u0648\u065a\u0645\u0648\u0627\u0631",
+      "\u0628\u0648\u062f\u0648\u0627\u0631",
+      "\u0628\u0631\u065b\u066e\u06ea\u0633\u0648\u0627\u0631",
+      "\u062c\u064f\u0645\u06c1",
+      "\u0628\u0679\u0648\u0627\u0631"
+    ],
+    "SHORTMONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u062c\u0646\u0624\u0631\u06cc",
+      "\u0641\u0631\u0624\u0631\u06cc",
+      "\u0645\u0627\u0631\u0655\u0686",
+      "\u0627\u067e\u0631\u06cc\u0644",
+      "\u0645\u06cc\u0654",
+      "\u062c\u0648\u0657\u0646",
+      "\u062c\u0648\u0657\u0644\u0627\u06cc\u06cc",
+      "\u0627\u06af\u0633\u062a",
+      "\u0633\u062a\u0645\u0628\u0631",
+      "\u0627\u06a9\u062a\u0648\u0657\u0628\u0631",
+      "\u0646\u0648\u0645\u0628\u0631",
+      "\u062f\u0633\u0645\u0628\u0631"
+    ],
+    "WEEKENDRANGE": [
+      6,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b9",
+    "DECIMAL_SEP": "\u066b",
+    "GROUP_SEP": "\u066c",
+    "PATTERNS": [
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 2,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ks",
+  "localeID": "ks",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb-tz.js
new file mode 100644
index 0000000..8082838
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "makeo",
+      "nyiaghuo"
+    ],
+    "DAY": [
+      "Jumaapii",
+      "Jumaatatu",
+      "Jumaane",
+      "Jumaatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumaamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Klisto",
+      "Baada ya Klisto"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januali",
+      "Febluali",
+      "Machi",
+      "Aplili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jmn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januali",
+      "Febluali",
+      "Machi",
+      "Aplili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "ksb-tz",
+  "localeID": "ksb_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb.js
new file mode 100644
index 0000000..796a298
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "makeo",
+      "nyiaghuo"
+    ],
+    "DAY": [
+      "Jumaapii",
+      "Jumaatatu",
+      "Jumaane",
+      "Jumaatano",
+      "Alhamisi",
+      "Ijumaa",
+      "Jumaamosi"
+    ],
+    "ERANAMES": [
+      "Kabla ya Klisto",
+      "Baada ya Klisto"
+    ],
+    "ERAS": [
+      "KK",
+      "BK"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januali",
+      "Febluali",
+      "Machi",
+      "Aplili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Jpi",
+      "Jtt",
+      "Jmn",
+      "Jtn",
+      "Alh",
+      "Iju",
+      "Jmo"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mac",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Januali",
+      "Febluali",
+      "Machi",
+      "Aplili",
+      "Mei",
+      "Juni",
+      "Julai",
+      "Agosti",
+      "Septemba",
+      "Oktoba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "ksb",
+  "localeID": "ksb",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf-cm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf-cm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf-cm.js
new file mode 100644
index 0000000..459b850
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf-cm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "s\u00e1r\u00faw\u00e1",
+      "c\u025b\u025b\u0301nko"
+    ],
+    "DAY": [
+      "s\u0254\u0301nd\u01dd",
+      "l\u01ddnd\u00ed",
+      "maad\u00ed",
+      "m\u025bkr\u025bd\u00ed",
+      "j\u01dd\u01ddd\u00ed",
+      "j\u00famb\u00e1",
+      "samd\u00ed"
+    ],
+    "ERANAMES": [
+      "di Y\u025b\u0301sus ak\u00e1 y\u00e1l\u025b",
+      "c\u00e1m\u025b\u025bn k\u01dd k\u01ddb\u0254pka Y"
+    ],
+    "ERAS": [
+      "d.Y.",
+      "k.Y."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u014bw\u00ed\u00ed a nt\u0254\u0301nt\u0254",
+      "\u014bw\u00ed\u00ed ak\u01dd b\u025b\u0301\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd r\u00e1\u00e1",
+      "\u014bw\u00ed\u00ed ak\u01dd nin",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1an",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1af\u0254k",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1ab\u025b\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1araa",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1anin",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u0254\u0301k",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u025b\u0301\u025b"
+    ],
+    "SHORTDAY": [
+      "s\u0254\u0301n",
+      "l\u01ddn",
+      "maa",
+      "m\u025bk",
+      "j\u01dd\u01dd",
+      "j\u00fam",
+      "sam"
+    ],
+    "SHORTMONTH": [
+      "\u014b1",
+      "\u014b2",
+      "\u014b3",
+      "\u014b4",
+      "\u014b5",
+      "\u014b6",
+      "\u014b7",
+      "\u014b8",
+      "\u014b9",
+      "\u014b10",
+      "\u014b11",
+      "\u014b12"
+    ],
+    "STANDALONEMONTH": [
+      "\u014bw\u00ed\u00ed a nt\u0254\u0301nt\u0254",
+      "\u014bw\u00ed\u00ed ak\u01dd b\u025b\u0301\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd r\u00e1\u00e1",
+      "\u014bw\u00ed\u00ed ak\u01dd nin",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1an",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1af\u0254k",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1ab\u025b\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1araa",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1anin",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u0254\u0301k",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u025b\u0301\u025b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ksf-cm",
+  "localeID": "ksf_CM",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf.js
new file mode 100644
index 0000000..36e62a8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksf.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "s\u00e1r\u00faw\u00e1",
+      "c\u025b\u025b\u0301nko"
+    ],
+    "DAY": [
+      "s\u0254\u0301nd\u01dd",
+      "l\u01ddnd\u00ed",
+      "maad\u00ed",
+      "m\u025bkr\u025bd\u00ed",
+      "j\u01dd\u01ddd\u00ed",
+      "j\u00famb\u00e1",
+      "samd\u00ed"
+    ],
+    "ERANAMES": [
+      "di Y\u025b\u0301sus ak\u00e1 y\u00e1l\u025b",
+      "c\u00e1m\u025b\u025bn k\u01dd k\u01ddb\u0254pka Y"
+    ],
+    "ERAS": [
+      "d.Y.",
+      "k.Y."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u014bw\u00ed\u00ed a nt\u0254\u0301nt\u0254",
+      "\u014bw\u00ed\u00ed ak\u01dd b\u025b\u0301\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd r\u00e1\u00e1",
+      "\u014bw\u00ed\u00ed ak\u01dd nin",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1an",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1af\u0254k",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1ab\u025b\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1araa",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1anin",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u0254\u0301k",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u025b\u0301\u025b"
+    ],
+    "SHORTDAY": [
+      "s\u0254\u0301n",
+      "l\u01ddn",
+      "maa",
+      "m\u025bk",
+      "j\u01dd\u01dd",
+      "j\u00fam",
+      "sam"
+    ],
+    "SHORTMONTH": [
+      "\u014b1",
+      "\u014b2",
+      "\u014b3",
+      "\u014b4",
+      "\u014b5",
+      "\u014b6",
+      "\u014b7",
+      "\u014b8",
+      "\u014b9",
+      "\u014b10",
+      "\u014b11",
+      "\u014b12"
+    ],
+    "STANDALONEMONTH": [
+      "\u014bw\u00ed\u00ed a nt\u0254\u0301nt\u0254",
+      "\u014bw\u00ed\u00ed ak\u01dd b\u025b\u0301\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd r\u00e1\u00e1",
+      "\u014bw\u00ed\u00ed ak\u01dd nin",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1an",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1af\u0254k",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1ab\u025b\u025b",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1araa",
+      "\u014bw\u00ed\u00ed ak\u01dd t\u00e1anin",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u0254\u0301k",
+      "\u014bw\u00ed\u00ed ak\u01dd nt\u025bk di b\u025b\u0301\u025b"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "FCFA",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ksf",
+  "localeID": "ksf",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh-de.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh-de.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh-de.js
new file mode 100644
index 0000000..793b20a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh-de.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Uhr v\u00f6rmiddaachs",
+      "Uhr nommendaachs"
+    ],
+    "DAY": [
+      "Sunndaach",
+      "Moondaach",
+      "Dinnsdaach",
+      "Metwoch",
+      "Dunnersdaach",
+      "Friidaach",
+      "Samsdaach"
+    ],
+    "ERANAMES": [
+      "v\u00fcr Chrestus",
+      "noh Chrestus"
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jannewa",
+      "F\u00e4browa",
+      "M\u00e4\u00e4z",
+      "Aprell",
+      "M\u00e4i",
+      "Juuni",
+      "Juuli",
+      "Oujo\u00df",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "SHORTDAY": [
+      "Su.",
+      "Mo.",
+      "Di.",
+      "Me.",
+      "Du.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "F\u00e4b",
+      "M\u00e4z",
+      "Apr",
+      "M\u00e4i",
+      "Jun",
+      "Jul",
+      "Ouj",
+      "S\u00e4p",
+      "Okt",
+      "Nov",
+      "Dez"
+    ],
+    "STANDALONEMONTH": [
+      "Jannewa",
+      "F\u00e4browa",
+      "M\u00e4\u00e4z",
+      "Aprell",
+      "M\u00e4i",
+      "Juuni",
+      "Juuli",
+      "Oujo\u00df",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, 'd\u00e4' d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM. y HH:mm:ss",
+    "mediumDate": "d. MMM. y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d. M. y HH:mm",
+    "shortDate": "d. M. y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ksh-de",
+  "localeID": "ksh_DE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh.js
new file mode 100644
index 0000000..312fbee
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ksh.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Uhr v\u00f6rmiddaachs",
+      "Uhr nommendaachs"
+    ],
+    "DAY": [
+      "Sunndaach",
+      "Moondaach",
+      "Dinnsdaach",
+      "Metwoch",
+      "Dunnersdaach",
+      "Friidaach",
+      "Samsdaach"
+    ],
+    "ERANAMES": [
+      "v\u00fcr Chrestus",
+      "noh Chrestus"
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Jannewa",
+      "F\u00e4browa",
+      "M\u00e4\u00e4z",
+      "Aprell",
+      "M\u00e4i",
+      "Juuni",
+      "Juuli",
+      "Oujo\u00df",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "SHORTDAY": [
+      "Su.",
+      "Mo.",
+      "Di.",
+      "Me.",
+      "Du.",
+      "Fr.",
+      "Sa."
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "F\u00e4b",
+      "M\u00e4z",
+      "Apr",
+      "M\u00e4i",
+      "Jun",
+      "Jul",
+      "Ouj",
+      "S\u00e4p",
+      "Okt",
+      "Nov",
+      "Dez"
+    ],
+    "STANDALONEMONTH": [
+      "Jannewa",
+      "F\u00e4browa",
+      "M\u00e4\u00e4z",
+      "Aprell",
+      "M\u00e4i",
+      "Juuni",
+      "Juuli",
+      "Oujo\u00df",
+      "Sept\u00e4mber",
+      "Oktoober",
+      "Nov\u00e4mber",
+      "Dez\u00e4mber"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, 'd\u00e4' d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM. y HH:mm:ss",
+    "mediumDate": "d. MMM. y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d. M. y HH:mm",
+    "shortDate": "d. M. y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ksh",
+  "localeID": "ksh",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw-gb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw-gb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw-gb.js
new file mode 100644
index 0000000..46a8c10
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw-gb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "dy Sul",
+      "dy Lun",
+      "dy Meurth",
+      "dy Merher",
+      "dy Yow",
+      "dy Gwener",
+      "dy Sadorn"
+    ],
+    "ERANAMES": [
+      "RC",
+      "AD"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "mis Genver",
+      "mis Hwevrer",
+      "mis Meurth",
+      "mis Ebrel",
+      "mis Me",
+      "mis Metheven",
+      "mis Gortheren",
+      "mis Est",
+      "mis Gwynngala",
+      "mis Hedra",
+      "mis Du",
+      "mis Kevardhu"
+    ],
+    "SHORTDAY": [
+      "Sul",
+      "Lun",
+      "Mth",
+      "Mhr",
+      "Yow",
+      "Gwe",
+      "Sad"
+    ],
+    "SHORTMONTH": [
+      "Gen",
+      "Hwe",
+      "Meu",
+      "Ebr",
+      "Me",
+      "Met",
+      "Gor",
+      "Est",
+      "Gwn",
+      "Hed",
+      "Du",
+      "Kev"
+    ],
+    "STANDALONEMONTH": [
+      "mis Genver",
+      "mis Hwevrer",
+      "mis Meurth",
+      "mis Ebrel",
+      "mis Me",
+      "mis Metheven",
+      "mis Gortheren",
+      "mis Est",
+      "mis Gwynngala",
+      "mis Hedra",
+      "mis Du",
+      "mis Kevardhu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kw-gb",
+  "localeID": "kw_GB",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw.js
new file mode 100644
index 0000000..d6a128b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_kw.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "a.m.",
+      "p.m."
+    ],
+    "DAY": [
+      "dy Sul",
+      "dy Lun",
+      "dy Meurth",
+      "dy Merher",
+      "dy Yow",
+      "dy Gwener",
+      "dy Sadorn"
+    ],
+    "ERANAMES": [
+      "RC",
+      "AD"
+    ],
+    "ERAS": [
+      "RC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "mis Genver",
+      "mis Hwevrer",
+      "mis Meurth",
+      "mis Ebrel",
+      "mis Me",
+      "mis Metheven",
+      "mis Gortheren",
+      "mis Est",
+      "mis Gwynngala",
+      "mis Hedra",
+      "mis Du",
+      "mis Kevardhu"
+    ],
+    "SHORTDAY": [
+      "Sul",
+      "Lun",
+      "Mth",
+      "Mhr",
+      "Yow",
+      "Gwe",
+      "Sad"
+    ],
+    "SHORTMONTH": [
+      "Gen",
+      "Hwe",
+      "Meu",
+      "Ebr",
+      "Me",
+      "Met",
+      "Gor",
+      "Est",
+      "Gwn",
+      "Hed",
+      "Du",
+      "Kev"
+    ],
+    "STANDALONEMONTH": [
+      "mis Genver",
+      "mis Hwevrer",
+      "mis Meurth",
+      "mis Ebrel",
+      "mis Me",
+      "mis Metheven",
+      "mis Gortheren",
+      "mis Est",
+      "mis Gwynngala",
+      "mis Hedra",
+      "mis Du",
+      "mis Kevardhu"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd/MM/y HH:mm",
+    "shortDate": "dd/MM/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a3",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "kw",
+  "localeID": "kw",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl-kg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl-kg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl-kg.js
new file mode 100644
index 0000000..31b8ace
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl-kg.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0442\u0430\u04a3\u043a\u044b",
+      "\u0442\u04af\u0448\u0442\u04e9\u043d \u043a\u0438\u0439\u0438\u043d"
+    ],
+    "DAY": [
+      "\u0436\u0435\u043a\u0448\u0435\u043c\u0431\u0438",
+      "\u0434\u04af\u0439\u0448\u04e9\u043c\u0431\u04af",
+      "\u0448\u0435\u0439\u0448\u0435\u043c\u0431\u0438",
+      "\u0448\u0430\u0440\u0448\u0435\u043c\u0431\u0438",
+      "\u0431\u0435\u0439\u0448\u0435\u043c\u0431\u0438",
+      "\u0436\u0443\u043c\u0430",
+      "\u0438\u0448\u0435\u043c\u0431\u0438"
+    ],
+    "ERANAMES": [
+      "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d\u0433\u0430 \u0447\u0435\u0439\u0438\u043d",
+      "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d"
+    ],
+    "ERAS": [
+      "\u0431.\u0437.\u0447.",
+      "\u0431.\u0437."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "SHORTDAY": [
+      "\u0436\u0435\u043a.",
+      "\u0434\u04af\u0439.",
+      "\u0448\u0435\u0439\u0448.",
+      "\u0448\u0430\u0440\u0448.",
+      "\u0431\u0435\u0439\u0448.",
+      "\u0436\u0443\u043c\u0430",
+      "\u0438\u0448\u043c."
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d.",
+      "\u0438\u044e\u043b.",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440\u044c",
+      "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b\u044c",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d\u044c",
+      "\u0418\u044e\u043b\u044c",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u041d\u043e\u044f\u0431\u0440\u044c",
+      "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d-MMMM, y-'\u0436'.",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KGS",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ky-cyrl-kg",
+  "localeID": "ky_Cyrl_KG",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl.js
new file mode 100644
index 0000000..a3c9123
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky-cyrl.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0442\u0430\u04a3\u043a\u044b",
+      "\u0442\u04af\u0448\u0442\u04e9\u043d \u043a\u0438\u0439\u0438\u043d"
+    ],
+    "DAY": [
+      "\u0436\u0435\u043a\u0448\u0435\u043c\u0431\u0438",
+      "\u0434\u04af\u0439\u0448\u04e9\u043c\u0431\u04af",
+      "\u0448\u0435\u0439\u0448\u0435\u043c\u0431\u0438",
+      "\u0448\u0430\u0440\u0448\u0435\u043c\u0431\u0438",
+      "\u0431\u0435\u0439\u0448\u0435\u043c\u0431\u0438",
+      "\u0436\u0443\u043c\u0430",
+      "\u0438\u0448\u0435\u043c\u0431\u0438"
+    ],
+    "ERANAMES": [
+      "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d\u0433\u0430 \u0447\u0435\u0439\u0438\u043d",
+      "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d"
+    ],
+    "ERAS": [
+      "\u0431.\u0437.\u0447.",
+      "\u0431.\u0437."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "SHORTDAY": [
+      "\u0436\u0435\u043a.",
+      "\u0434\u04af\u0439.",
+      "\u0448\u0435\u0439\u0448.",
+      "\u0448\u0430\u0440\u0448.",
+      "\u0431\u0435\u0439\u0448.",
+      "\u0436\u0443\u043c\u0430",
+      "\u0438\u0448\u043c."
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d.",
+      "\u0438\u044e\u043b.",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440\u044c",
+      "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b\u044c",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d\u044c",
+      "\u0418\u044e\u043b\u044c",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u041d\u043e\u044f\u0431\u0440\u044c",
+      "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d-MMMM, y-'\u0436'.",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KGS",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ky-cyrl",
+  "localeID": "ky_Cyrl",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky.js
new file mode 100644
index 0000000..bba5e7a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ky.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0442\u0430\u04a3\u043a\u044b",
+      "\u0442\u04af\u0448\u0442\u04e9\u043d \u043a\u0438\u0439\u0438\u043d"
+    ],
+    "DAY": [
+      "\u0436\u0435\u043a\u0448\u0435\u043c\u0431\u0438",
+      "\u0434\u04af\u0439\u0448\u04e9\u043c\u0431\u04af",
+      "\u0448\u0435\u0439\u0448\u0435\u043c\u0431\u0438",
+      "\u0448\u0430\u0440\u0448\u0435\u043c\u0431\u0438",
+      "\u0431\u0435\u0439\u0448\u0435\u043c\u0431\u0438",
+      "\u0436\u0443\u043c\u0430",
+      "\u0438\u0448\u0435\u043c\u0431\u0438"
+    ],
+    "ERANAMES": [
+      "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d\u0433\u0430 \u0447\u0435\u0439\u0438\u043d",
+      "\u0431\u0438\u0437\u0434\u0438\u043d \u0437\u0430\u043c\u0430\u043d"
+    ],
+    "ERAS": [
+      "\u0431.\u0437.\u0447.",
+      "\u0431.\u0437."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u044f\u043d\u0432\u0430\u0440\u044c",
+      "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u043c\u0430\u0440\u0442",
+      "\u0430\u043f\u0440\u0435\u043b\u044c",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d\u044c",
+      "\u0438\u044e\u043b\u044c",
+      "\u0430\u0432\u0433\u0443\u0441\u0442",
+      "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u043d\u043e\u044f\u0431\u0440\u044c",
+      "\u0434\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "SHORTDAY": [
+      "\u0436\u0435\u043a.",
+      "\u0434\u04af\u0439.",
+      "\u0448\u0435\u0439\u0448.",
+      "\u0448\u0430\u0440\u0448.",
+      "\u0431\u0435\u0439\u0448.",
+      "\u0436\u0443\u043c\u0430",
+      "\u0438\u0448\u043c."
+    ],
+    "SHORTMONTH": [
+      "\u044f\u043d\u0432.",
+      "\u0444\u0435\u0432.",
+      "\u043c\u0430\u0440.",
+      "\u0430\u043f\u0440.",
+      "\u043c\u0430\u0439",
+      "\u0438\u044e\u043d.",
+      "\u0438\u044e\u043b.",
+      "\u0430\u0432\u0433.",
+      "\u0441\u0435\u043d.",
+      "\u043e\u043a\u0442.",
+      "\u043d\u043e\u044f.",
+      "\u0434\u0435\u043a."
+    ],
+    "STANDALONEMONTH": [
+      "\u042f\u043d\u0432\u0430\u0440\u044c",
+      "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
+      "\u041c\u0430\u0440\u0442",
+      "\u0410\u043f\u0440\u0435\u043b\u044c",
+      "\u041c\u0430\u0439",
+      "\u0418\u044e\u043d\u044c",
+      "\u0418\u044e\u043b\u044c",
+      "\u0410\u0432\u0433\u0443\u0441\u0442",
+      "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+      "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
+      "\u041d\u043e\u044f\u0431\u0440\u044c",
+      "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d-MMMM, y-'\u0436'.",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "KGS",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ky",
+  "localeID": "ky",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag-tz.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag-tz.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag-tz.js
new file mode 100644
index 0000000..016705c
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag-tz.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "TOO",
+      "MUU"
+    ],
+    "DAY": [
+      "Jumap\u00ediri",
+      "Jumat\u00e1tu",
+      "Juma\u00edne",
+      "Jumat\u00e1ano",
+      "Alam\u00edisi",
+      "Ijum\u00e1a",
+      "Jumam\u00f3osi"
+    ],
+    "ERANAMES": [
+      "K\u0268r\u0268sit\u0289 s\u0268 anavyaal",
+      "K\u0268r\u0268sit\u0289 akavyaalwe"
+    ],
+    "ERAS": [
+      "KSA",
+      "KA"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "K\u0289f\u00fangat\u0268",
+      "K\u0289naan\u0268",
+      "K\u0289keenda",
+      "Kwiikumi",
+      "Kwiinyamb\u00e1la",
+      "Kwiidwaata",
+      "K\u0289m\u0289\u0289nch\u0268",
+      "K\u0289v\u0268\u0268r\u0268",
+      "K\u0289saat\u0289",
+      "Kwiinyi",
+      "K\u0289saano",
+      "K\u0289sasat\u0289"
+    ],
+    "SHORTDAY": [
+      "P\u00edili",
+      "T\u00e1atu",
+      "\u00cdne",
+      "T\u00e1ano",
+      "Alh",
+      "Ijm",
+      "M\u00f3osi"
+    ],
+    "SHORTMONTH": [
+      "F\u00fangat\u0268",
+      "Naan\u0268",
+      "Keenda",
+      "Ik\u00fami",
+      "Inyambala",
+      "Idwaata",
+      "M\u0289\u0289nch\u0268",
+      "V\u0268\u0268r\u0268",
+      "Saat\u0289",
+      "Inyi",
+      "Saano",
+      "Sasat\u0289"
+    ],
+    "STANDALONEMONTH": [
+      "K\u0289f\u00fangat\u0268",
+      "K\u0289naan\u0268",
+      "K\u0289keenda",
+      "Kwiikumi",
+      "Kwiinyamb\u00e1la",
+      "Kwiidwaata",
+      "K\u0289m\u0289\u0289nch\u0268",
+      "K\u0289v\u0268\u0268r\u0268",
+      "K\u0289saat\u0289",
+      "Kwiinyi",
+      "K\u0289saano",
+      "K\u0289sasat\u0289"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lag-tz",
+  "localeID": "lag_TZ",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag.js
new file mode 100644
index 0000000..db5682f
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lag.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "TOO",
+      "MUU"
+    ],
+    "DAY": [
+      "Jumap\u00ediri",
+      "Jumat\u00e1tu",
+      "Juma\u00edne",
+      "Jumat\u00e1ano",
+      "Alam\u00edisi",
+      "Ijum\u00e1a",
+      "Jumam\u00f3osi"
+    ],
+    "ERANAMES": [
+      "K\u0268r\u0268sit\u0289 s\u0268 anavyaal",
+      "K\u0268r\u0268sit\u0289 akavyaalwe"
+    ],
+    "ERAS": [
+      "KSA",
+      "KA"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "K\u0289f\u00fangat\u0268",
+      "K\u0289naan\u0268",
+      "K\u0289keenda",
+      "Kwiikumi",
+      "Kwiinyamb\u00e1la",
+      "Kwiidwaata",
+      "K\u0289m\u0289\u0289nch\u0268",
+      "K\u0289v\u0268\u0268r\u0268",
+      "K\u0289saat\u0289",
+      "Kwiinyi",
+      "K\u0289saano",
+      "K\u0289sasat\u0289"
+    ],
+    "SHORTDAY": [
+      "P\u00edili",
+      "T\u00e1atu",
+      "\u00cdne",
+      "T\u00e1ano",
+      "Alh",
+      "Ijm",
+      "M\u00f3osi"
+    ],
+    "SHORTMONTH": [
+      "F\u00fangat\u0268",
+      "Naan\u0268",
+      "Keenda",
+      "Ik\u00fami",
+      "Inyambala",
+      "Idwaata",
+      "M\u0289\u0289nch\u0268",
+      "V\u0268\u0268r\u0268",
+      "Saat\u0289",
+      "Inyi",
+      "Saano",
+      "Sasat\u0289"
+    ],
+    "STANDALONEMONTH": [
+      "K\u0289f\u00fangat\u0268",
+      "K\u0289naan\u0268",
+      "K\u0289keenda",
+      "Kwiikumi",
+      "Kwiinyamb\u00e1la",
+      "Kwiidwaata",
+      "K\u0289m\u0289\u0289nch\u0268",
+      "K\u0289v\u0268\u0268r\u0268",
+      "K\u0289saat\u0289",
+      "Kwiinyi",
+      "K\u0289saano",
+      "K\u0289sasat\u0289"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TSh",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lag",
+  "localeID": "lag",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb-lu.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb-lu.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb-lu.js
new file mode 100644
index 0000000..a55c1f0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb-lu.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "moies",
+      "nom\u00ebttes"
+    ],
+    "DAY": [
+      "Sonndeg",
+      "M\u00e9indeg",
+      "D\u00ebnschdeg",
+      "M\u00ebttwoch",
+      "Donneschdeg",
+      "Freideg",
+      "Samschdeg"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4erz",
+      "Abr\u00ebll",
+      "Mee",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "Son.",
+      "M\u00e9i.",
+      "D\u00ebn.",
+      "M\u00ebt.",
+      "Don.",
+      "Fre.",
+      "Sam."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4e.",
+      "Abr.",
+      "Mee",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4erz",
+      "Abr\u00ebll",
+      "Mee",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "lb-lu",
+  "localeID": "lb_LU",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb.js
new file mode 100644
index 0000000..92fd0f9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lb.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "moies",
+      "nom\u00ebttes"
+    ],
+    "DAY": [
+      "Sonndeg",
+      "M\u00e9indeg",
+      "D\u00ebnschdeg",
+      "M\u00ebttwoch",
+      "Donneschdeg",
+      "Freideg",
+      "Samschdeg"
+    ],
+    "ERANAMES": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "ERAS": [
+      "v. Chr.",
+      "n. Chr."
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4erz",
+      "Abr\u00ebll",
+      "Mee",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "SHORTDAY": [
+      "Son.",
+      "M\u00e9i.",
+      "D\u00ebn.",
+      "M\u00ebt.",
+      "Don.",
+      "Fre.",
+      "Sam."
+    ],
+    "SHORTMONTH": [
+      "Jan.",
+      "Feb.",
+      "M\u00e4e.",
+      "Abr.",
+      "Mee",
+      "Juni",
+      "Juli",
+      "Aug.",
+      "Sep.",
+      "Okt.",
+      "Nov.",
+      "Dez."
+    ],
+    "STANDALONEMONTH": [
+      "Januar",
+      "Februar",
+      "M\u00e4erz",
+      "Abr\u00ebll",
+      "Mee",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d. MMMM y",
+    "longDate": "d. MMMM y",
+    "medium": "d. MMM y HH:mm:ss",
+    "mediumDate": "d. MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "dd.MM.yy HH:mm",
+    "shortDate": "dd.MM.yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "lb",
+  "localeID": "lb",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg-ug.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg-ug.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg-ug.js
new file mode 100644
index 0000000..6e884f3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg-ug.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sabbiiti",
+      "Balaza",
+      "Lwakubiri",
+      "Lwakusatu",
+      "Lwakuna",
+      "Lwakutaano",
+      "Lwamukaaga"
+    ],
+    "ERANAMES": [
+      "Kulisito nga tannaza",
+      "Bukya Kulisito Azaal"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Sab",
+      "Bal",
+      "Lw2",
+      "Lw3",
+      "Lw4",
+      "Lw5",
+      "Lw6"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apu",
+      "Maa",
+      "Juu",
+      "Jul",
+      "Agu",
+      "Seb",
+      "Oki",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "lg-ug",
+  "localeID": "lg_UG",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg.js
new file mode 100644
index 0000000..dd56614
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lg.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sabbiiti",
+      "Balaza",
+      "Lwakubiri",
+      "Lwakusatu",
+      "Lwakuna",
+      "Lwakutaano",
+      "Lwamukaaga"
+    ],
+    "ERANAMES": [
+      "Kulisito nga tannaza",
+      "Bukya Kulisito Azaal"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "SHORTDAY": [
+      "Sab",
+      "Bal",
+      "Lw2",
+      "Lw3",
+      "Lw4",
+      "Lw5",
+      "Lw6"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apu",
+      "Maa",
+      "Juu",
+      "Jul",
+      "Agu",
+      "Seb",
+      "Oki",
+      "Nov",
+      "Des"
+    ],
+    "STANDALONEMONTH": [
+      "Janwaliyo",
+      "Febwaliyo",
+      "Marisi",
+      "Apuli",
+      "Maayi",
+      "Juuni",
+      "Julaayi",
+      "Agusito",
+      "Sebuttemba",
+      "Okitobba",
+      "Novemba",
+      "Desemba"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "UGX",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "lg",
+  "localeID": "lg",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt-us.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt-us.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt-us.js
new file mode 100644
index 0000000..8f0f754
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt-us.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "A\u014bp\u00e9tuwak\u021fa\u014b",
+      "A\u014bp\u00e9tuwa\u014b\u017ei",
+      "A\u014bp\u00e9tunu\u014bpa",
+      "A\u014bp\u00e9tuyamni",
+      "A\u014bp\u00e9tutopa",
+      "A\u014bp\u00e9tuzapta\u014b",
+      "Ow\u00e1\u014bgyu\u017ea\u017eapi"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Wi\u00f3the\u021fika W\u00ed",
+      "Thiy\u00f3\u021feyu\u014bka W\u00ed",
+      "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed",
+      "P\u021fe\u017e\u00edt\u021fo W\u00ed",
+      "\u010cha\u014bw\u00e1pet\u021fo W\u00ed",
+      "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed",
+      "\u010cha\u014bp\u021f\u00e1sapa W\u00ed",
+      "Was\u00fat\u021fu\u014b W\u00ed",
+      "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed",
+      "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed",
+      "Wan\u00edyetu W\u00ed",
+      "T\u021fah\u00e9kap\u0161u\u014b W\u00ed"
+    ],
+    "SHORTDAY": [
+      "A\u014bp\u00e9tuwak\u021fa\u014b",
+      "A\u014bp\u00e9tuwa\u014b\u017ei",
+      "A\u014bp\u00e9tunu\u014bpa",
+      "A\u014bp\u00e9tuyamni",
+      "A\u014bp\u00e9tutopa",
+      "A\u014bp\u00e9tuzapta\u014b",
+      "Ow\u00e1\u014bgyu\u017ea\u017eapi"
+    ],
+    "SHORTMONTH": [
+      "Wi\u00f3the\u021fika W\u00ed",
+      "Thiy\u00f3\u021feyu\u014bka W\u00ed",
+      "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed",
+      "P\u021fe\u017e\u00edt\u021fo W\u00ed",
+      "\u010cha\u014bw\u00e1pet\u021fo W\u00ed",
+      "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed",
+      "\u010cha\u014bp\u021f\u00e1sapa W\u00ed",
+      "Was\u00fat\u021fu\u014b W\u00ed",
+      "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed",
+      "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed",
+      "Wan\u00edyetu W\u00ed",
+      "T\u021fah\u00e9kap\u0161u\u014b W\u00ed"
+    ],
+    "STANDALONEMONTH": [
+      "Wi\u00f3the\u021fika W\u00ed",
+      "Thiy\u00f3\u021feyu\u014bka W\u00ed",
+      "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed",
+      "P\u021fe\u017e\u00edt\u021fo W\u00ed",
+      "\u010cha\u014bw\u00e1pet\u021fo W\u00ed",
+      "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed",
+      "\u010cha\u014bp\u021f\u00e1sapa W\u00ed",
+      "Was\u00fat\u021fu\u014b W\u00ed",
+      "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed",
+      "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed",
+      "Wan\u00edyetu W\u00ed",
+      "T\u021fah\u00e9kap\u0161u\u014b W\u00ed"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lkt-us",
+  "localeID": "lkt_US",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt.js
new file mode 100644
index 0000000..7b66c44
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_lkt.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "A\u014bp\u00e9tuwak\u021fa\u014b",
+      "A\u014bp\u00e9tuwa\u014b\u017ei",
+      "A\u014bp\u00e9tunu\u014bpa",
+      "A\u014bp\u00e9tuyamni",
+      "A\u014bp\u00e9tutopa",
+      "A\u014bp\u00e9tuzapta\u014b",
+      "Ow\u00e1\u014bgyu\u017ea\u017eapi"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Wi\u00f3the\u021fika W\u00ed",
+      "Thiy\u00f3\u021feyu\u014bka W\u00ed",
+      "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed",
+      "P\u021fe\u017e\u00edt\u021fo W\u00ed",
+      "\u010cha\u014bw\u00e1pet\u021fo W\u00ed",
+      "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed",
+      "\u010cha\u014bp\u021f\u00e1sapa W\u00ed",
+      "Was\u00fat\u021fu\u014b W\u00ed",
+      "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed",
+      "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed",
+      "Wan\u00edyetu W\u00ed",
+      "T\u021fah\u00e9kap\u0161u\u014b W\u00ed"
+    ],
+    "SHORTDAY": [
+      "A\u014bp\u00e9tuwak\u021fa\u014b",
+      "A\u014bp\u00e9tuwa\u014b\u017ei",
+      "A\u014bp\u00e9tunu\u014bpa",
+      "A\u014bp\u00e9tuyamni",
+      "A\u014bp\u00e9tutopa",
+      "A\u014bp\u00e9tuzapta\u014b",
+      "Ow\u00e1\u014bgyu\u017ea\u017eapi"
+    ],
+    "SHORTMONTH": [
+      "Wi\u00f3the\u021fika W\u00ed",
+      "Thiy\u00f3\u021feyu\u014bka W\u00ed",
+      "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed",
+      "P\u021fe\u017e\u00edt\u021fo W\u00ed",
+      "\u010cha\u014bw\u00e1pet\u021fo W\u00ed",
+      "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed",
+      "\u010cha\u014bp\u021f\u00e1sapa W\u00ed",
+      "Was\u00fat\u021fu\u014b W\u00ed",
+      "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed",
+      "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed",
+      "Wan\u00edyetu W\u00ed",
+      "T\u021fah\u00e9kap\u0161u\u014b W\u00ed"
+    ],
+    "STANDALONEMONTH": [
+      "Wi\u00f3the\u021fika W\u00ed",
+      "Thiy\u00f3\u021feyu\u014bka W\u00ed",
+      "I\u0161t\u00e1wi\u010dhayaza\u014b W\u00ed",
+      "P\u021fe\u017e\u00edt\u021fo W\u00ed",
+      "\u010cha\u014bw\u00e1pet\u021fo W\u00ed",
+      "W\u00edpazuk\u021fa-wa\u0161t\u00e9 W\u00ed",
+      "\u010cha\u014bp\u021f\u00e1sapa W\u00ed",
+      "Was\u00fat\u021fu\u014b W\u00ed",
+      "\u010cha\u014bw\u00e1pe\u01e7i W\u00ed",
+      "\u010cha\u014bw\u00e1pe-kasn\u00e1 W\u00ed",
+      "Wan\u00edyetu W\u00ed",
+      "T\u021fah\u00e9kap\u0161u\u014b W\u00ed"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "lkt",
+  "localeID": "lkt",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-ao.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-ao.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-ao.js
new file mode 100644
index 0000000..a3bc109
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ln-ao.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "nt\u0254\u0301ng\u0254\u0301",
+      "mp\u00f3kwa"
+    ],
+    "DAY": [
+      "eyenga",
+      "mok\u0254l\u0254 mwa yambo",
+      "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
+      "mok\u0254l\u0254 mwa m\u00eds\u00e1to",
+      "mok\u0254l\u0254 ya m\u00edn\u00e9i",
+      "mok\u0254l\u0254 ya m\u00edt\u00e1no",
+      "mp\u0254\u0301s\u0254"
+    ],
+    "ERANAMES": [
+      "Yambo ya Y\u00e9zu Kr\u00eds",
+      "Nsima ya Y\u00e9zu Kr\u00eds"
+    ],
+    "ERAS": [
+      "lib\u00f3so ya",
+      "nsima ya Y"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "SHORTDAY": [
+      "eye",
+      "ybo",
+      "mbl",
+      "mst",
+      "min",
+      "mtn",
+      "mps"
+    ],
+    "SHORTMONTH": [
+      "yan",
+      "fbl",
+      "msi",
+      "apl",
+      "mai",
+      "yun",
+      "yul",
+      "agt",
+      "stb",
+      "\u0254tb",
+      "nvb",
+      "dsb"
+    ],
+    "STANDALONEMONTH": [
+      "s\u00e1nz\u00e1 ya yambo",
+      "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+      "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+      "s\u00e1nz\u00e1 ya m\u00ednei",
+      "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+      "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+      "s\u00e1nz\u00e1 ya nsambo",
+      "s\u00e1nz\u00e1 ya mwambe",
+      "s\u00e1nz\u00e1 ya libwa",
+      "s\u00e1nz\u00e1 ya z\u00f3mi",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+      "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Kz",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "ln-ao",
+  "localeID": "ln_AO",
+  "pluralCat": function(n, opt_precision) {  if (n >= 0 && n <= 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);


[38/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.js
new file mode 100644
index 0000000..a8aad46
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular.js
@@ -0,0 +1,30428 @@
+/**
+ * @license AngularJS v1.5.0
+ * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, document, undefined) {'use strict';
+
+/**
+ * @description
+ *
+ * This object provides a utility for producing rich Error messages within
+ * Angular. It can be called as follows:
+ *
+ * var exampleMinErr = minErr('example');
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
+ *
+ * The above creates an instance of minErr in the example namespace. The
+ * resulting error will have a namespaced error code of example.one.  The
+ * resulting error will replace {0} with the value of foo, and {1} with the
+ * value of bar. The object is not restricted in the number of arguments it can
+ * take.
+ *
+ * If fewer arguments are specified than necessary for interpolation, the extra
+ * interpolation markers will be preserved in the final string.
+ *
+ * Since data will be parsed statically during a build step, some restrictions
+ * are applied with respect to how minErr instances are created and called.
+ * Instances should have names of the form namespaceMinErr for a minErr created
+ * using minErr('namespace') . Error codes, namespaces and template strings
+ * should all be static strings, not variables or general expressions.
+ *
+ * @param {string} module The namespace to use for the new minErr instance.
+ * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
+ *   error from returned function, for cases when a particular type of error is useful.
+ * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
+ */
+
+function minErr(module, ErrorConstructor) {
+  ErrorConstructor = ErrorConstructor || Error;
+  return function() {
+    var SKIP_INDEXES = 2;
+
+    var templateArgs = arguments,
+      code = templateArgs[0],
+      message = '[' + (module ? module + ':' : '') + code + '] ',
+      template = templateArgs[1],
+      paramPrefix, i;
+
+    message += template.replace(/\{\d+\}/g, function(match) {
+      var index = +match.slice(1, -1),
+        shiftedIndex = index + SKIP_INDEXES;
+
+      if (shiftedIndex < templateArgs.length) {
+        return toDebugString(templateArgs[shiftedIndex]);
+      }
+
+      return match;
+    });
+
+    message += '\nhttp://errors.angularjs.org/1.5.0/' +
+      (module ? module + '/' : '') + code;
+
+    for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
+      message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +
+        encodeURIComponent(toDebugString(templateArgs[i]));
+    }
+
+    return new ErrorConstructor(message);
+  };
+}
+
+/* We need to tell jshint what variables are being exported */
+/* global angular: true,
+  msie: true,
+  jqLite: true,
+  jQuery: true,
+  slice: true,
+  splice: true,
+  push: true,
+  toString: true,
+  ngMinErr: true,
+  angularModule: true,
+  uid: true,
+  REGEX_STRING_REGEXP: true,
+  VALIDITY_STATE_PROPERTY: true,
+
+  lowercase: true,
+  uppercase: true,
+  manualLowercase: true,
+  manualUppercase: true,
+  nodeName_: true,
+  isArrayLike: true,
+  forEach: true,
+  forEachSorted: true,
+  reverseParams: true,
+  nextUid: true,
+  setHashKey: true,
+  extend: true,
+  toInt: true,
+  inherit: true,
+  merge: true,
+  noop: true,
+  identity: true,
+  valueFn: true,
+  isUndefined: true,
+  isDefined: true,
+  isObject: true,
+  isBlankObject: true,
+  isString: true,
+  isNumber: true,
+  isDate: true,
+  isArray: true,
+  isFunction: true,
+  isRegExp: true,
+  isWindow: true,
+  isScope: true,
+  isFile: true,
+  isFormData: true,
+  isBlob: true,
+  isBoolean: true,
+  isPromiseLike: true,
+  trim: true,
+  escapeForRegexp: true,
+  isElement: true,
+  makeMap: true,
+  includes: true,
+  arrayRemove: true,
+  copy: true,
+  shallowCopy: true,
+  equals: true,
+  csp: true,
+  jq: true,
+  concat: true,
+  sliceArgs: true,
+  bind: true,
+  toJsonReplacer: true,
+  toJson: true,
+  fromJson: true,
+  convertTimezoneToLocal: true,
+  timezoneToOffset: true,
+  startingTag: true,
+  tryDecodeURIComponent: true,
+  parseKeyValue: true,
+  toKeyValue: true,
+  encodeUriSegment: true,
+  encodeUriQuery: true,
+  angularInit: true,
+  bootstrap: true,
+  getTestability: true,
+  snake_case: true,
+  bindJQuery: true,
+  assertArg: true,
+  assertArgFn: true,
+  assertNotHasOwnProperty: true,
+  getter: true,
+  getBlockNodes: true,
+  hasOwnProperty: true,
+  createMap: true,
+
+  NODE_TYPE_ELEMENT: true,
+  NODE_TYPE_ATTRIBUTE: true,
+  NODE_TYPE_TEXT: true,
+  NODE_TYPE_COMMENT: true,
+  NODE_TYPE_DOCUMENT: true,
+  NODE_TYPE_DOCUMENT_FRAGMENT: true,
+*/
+
+////////////////////////////////////
+
+/**
+ * @ngdoc module
+ * @name ng
+ * @module ng
+ * @description
+ *
+ * # ng (core module)
+ * The ng module is loaded by default when an AngularJS application is started. The module itself
+ * contains the essential components for an AngularJS application to function. The table below
+ * lists a high level breakdown of each of the services/factories, filters, directives and testing
+ * components available within this core module.
+ *
+ * <div doc-module-components="ng"></div>
+ */
+
+var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
+
+// The name of a form control's ValidityState property.
+// This is used so that it's possible for internal tests to create mock ValidityStates.
+var VALIDITY_STATE_PROPERTY = 'validity';
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
+var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
+
+
+var manualLowercase = function(s) {
+  /* jshint bitwise: false */
+  return isString(s)
+      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
+      : s;
+};
+var manualUppercase = function(s) {
+  /* jshint bitwise: false */
+  return isString(s)
+      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
+      : s;
+};
+
+
+// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
+// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
+// with correct but slower alternatives. See https://github.com/angular/angular.js/issues/11387
+if ('i' !== 'I'.toLowerCase()) {
+  lowercase = manualLowercase;
+  uppercase = manualUppercase;
+}
+
+
+var
+    msie,             // holds major version number for IE, or NaN if UA is not IE.
+    jqLite,           // delay binding since jQuery could be loaded after us.
+    jQuery,           // delay binding
+    slice             = [].slice,
+    splice            = [].splice,
+    push              = [].push,
+    toString          = Object.prototype.toString,
+    getPrototypeOf    = Object.getPrototypeOf,
+    ngMinErr          = minErr('ng'),
+
+    /** @name angular */
+    angular           = window.angular || (window.angular = {}),
+    angularModule,
+    uid               = 0;
+
+/**
+ * documentMode is an IE-only property
+ * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
+ */
+msie = document.documentMode;
+
+
+/**
+ * @private
+ * @param {*} obj
+ * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
+ *                   String ...)
+ */
+function isArrayLike(obj) {
+
+  // `null`, `undefined` and `window` are not array-like
+  if (obj == null || isWindow(obj)) return false;
+
+  // arrays, strings and jQuery/jqLite objects are array like
+  // * jqLite is either the jQuery or jqLite constructor function
+  // * we have to check the existence of jqLite first as this method is called
+  //   via the forEach method when constructing the jqLite object in the first place
+  if (isArray(obj) || isString(obj) || (jqLite && obj instanceof jqLite)) return true;
+
+  // Support: iOS 8.2 (not reproducible in simulator)
+  // "length" in obj used to prevent JIT error (gh-11508)
+  var length = "length" in Object(obj) && obj.length;
+
+  // NodeList objects (with `item` method) and
+  // other objects with suitable length characteristics are array-like
+  return isNumber(length) &&
+    (length >= 0 && ((length - 1) in obj || obj instanceof Array) || typeof obj.item == 'function');
+
+}
+
+/**
+ * @ngdoc function
+ * @name angular.forEach
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
+ * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
+ * is the value of an object property or an array element, `key` is the object property key or
+ * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
+ *
+ * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
+ * using the `hasOwnProperty` method.
+ *
+ * Unlike ES262's
+ * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
+ * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
+ * return the value provided.
+ *
+   ```js
+     var values = {name: 'misko', gender: 'male'};
+     var log = [];
+     angular.forEach(values, function(value, key) {
+       this.push(key + ': ' + value);
+     }, log);
+     expect(log).toEqual(['name: misko', 'gender: male']);
+   ```
+ *
+ * @param {Object|Array} obj Object to iterate over.
+ * @param {Function} iterator Iterator function.
+ * @param {Object=} context Object to become context (`this`) for the iterator function.
+ * @returns {Object|Array} Reference to `obj`.
+ */
+
+function forEach(obj, iterator, context) {
+  var key, length;
+  if (obj) {
+    if (isFunction(obj)) {
+      for (key in obj) {
+        // Need to check if hasOwnProperty exists,
+        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
+        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else if (isArray(obj) || isArrayLike(obj)) {
+      var isPrimitive = typeof obj !== 'object';
+      for (key = 0, length = obj.length; key < length; key++) {
+        if (isPrimitive || key in obj) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else if (obj.forEach && obj.forEach !== forEach) {
+        obj.forEach(iterator, context, obj);
+    } else if (isBlankObject(obj)) {
+      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+      for (key in obj) {
+        iterator.call(context, obj[key], key, obj);
+      }
+    } else if (typeof obj.hasOwnProperty === 'function') {
+      // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed
+      for (key in obj) {
+        if (obj.hasOwnProperty(key)) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else {
+      // Slow path for objects which do not have a method `hasOwnProperty`
+      for (key in obj) {
+        if (hasOwnProperty.call(obj, key)) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    }
+  }
+  return obj;
+}
+
+function forEachSorted(obj, iterator, context) {
+  var keys = Object.keys(obj).sort();
+  for (var i = 0; i < keys.length; i++) {
+    iterator.call(context, obj[keys[i]], keys[i]);
+  }
+  return keys;
+}
+
+
+/**
+ * when using forEach the params are value, key, but it is often useful to have key, value.
+ * @param {function(string, *)} iteratorFn
+ * @returns {function(*, string)}
+ */
+function reverseParams(iteratorFn) {
+  return function(value, key) {iteratorFn(key, value);};
+}
+
+/**
+ * A consistent way of creating unique IDs in angular.
+ *
+ * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
+ * we hit number precision issues in JavaScript.
+ *
+ * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
+ *
+ * @returns {number} an unique alpha-numeric string
+ */
+function nextUid() {
+  return ++uid;
+}
+
+
+/**
+ * Set or clear the hashkey for an object.
+ * @param obj object
+ * @param h the hashkey (!truthy to delete the hashkey)
+ */
+function setHashKey(obj, h) {
+  if (h) {
+    obj.$$hashKey = h;
+  } else {
+    delete obj.$$hashKey;
+  }
+}
+
+
+function baseExtend(dst, objs, deep) {
+  var h = dst.$$hashKey;
+
+  for (var i = 0, ii = objs.length; i < ii; ++i) {
+    var obj = objs[i];
+    if (!isObject(obj) && !isFunction(obj)) continue;
+    var keys = Object.keys(obj);
+    for (var j = 0, jj = keys.length; j < jj; j++) {
+      var key = keys[j];
+      var src = obj[key];
+
+      if (deep && isObject(src)) {
+        if (isDate(src)) {
+          dst[key] = new Date(src.valueOf());
+        } else if (isRegExp(src)) {
+          dst[key] = new RegExp(src);
+        } else if (src.nodeName) {
+          dst[key] = src.cloneNode(true);
+        } else if (isElement(src)) {
+          dst[key] = src.clone();
+        } else {
+          if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
+          baseExtend(dst[key], [src], true);
+        }
+      } else {
+        dst[key] = src;
+      }
+    }
+  }
+
+  setHashKey(dst, h);
+  return dst;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.extend
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+ * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+ * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
+ *
+ * **Note:** Keep in mind that `angular.extend` does not support recursive merge (deep copy). Use
+ * {@link angular.merge} for this.
+ *
+ * @param {Object} dst Destination object.
+ * @param {...Object} src Source object(s).
+ * @returns {Object} Reference to `dst`.
+ */
+function extend(dst) {
+  return baseExtend(dst, slice.call(arguments, 1), false);
+}
+
+
+/**
+* @ngdoc function
+* @name angular.merge
+* @module ng
+* @kind function
+*
+* @description
+* Deeply extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+* by passing an empty object as the target: `var object = angular.merge({}, object1, object2)`.
+*
+* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source
+* objects, performing a deep copy.
+*
+* @param {Object} dst Destination object.
+* @param {...Object} src Source object(s).
+* @returns {Object} Reference to `dst`.
+*/
+function merge(dst) {
+  return baseExtend(dst, slice.call(arguments, 1), true);
+}
+
+
+
+function toInt(str) {
+  return parseInt(str, 10);
+}
+
+
+function inherit(parent, extra) {
+  return extend(Object.create(parent), extra);
+}
+
+/**
+ * @ngdoc function
+ * @name angular.noop
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that performs no operations. This function can be useful when writing code in the
+ * functional style.
+   ```js
+     function foo(callback) {
+       var result = calculateResult();
+       (callback || angular.noop)(result);
+     }
+   ```
+ */
+function noop() {}
+noop.$inject = [];
+
+
+/**
+ * @ngdoc function
+ * @name angular.identity
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that returns its first argument. This function is useful when writing code in the
+ * functional style.
+ *
+   ```js
+     function transformer(transformationFn, value) {
+       return (transformationFn || angular.identity)(value);
+     };
+   ```
+  * @param {*} value to be returned.
+  * @returns {*} the value passed in.
+ */
+function identity($) {return $;}
+identity.$inject = [];
+
+
+function valueFn(value) {return function() {return value;};}
+
+function hasCustomToString(obj) {
+  return isFunction(obj.toString) && obj.toString !== toString;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isUndefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is undefined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is undefined.
+ */
+function isUndefined(value) {return typeof value === 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is defined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is defined.
+ */
+function isDefined(value) {return typeof value !== 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isObject
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
+ * considered to be objects. Note that JavaScript arrays are objects.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Object` but not `null`.
+ */
+function isObject(value) {
+  // http://jsperf.com/isobject4
+  return value !== null && typeof value === 'object';
+}
+
+
+/**
+ * Determine if a value is an object with a null prototype
+ *
+ * @returns {boolean} True if `value` is an `Object` with a null prototype
+ */
+function isBlankObject(value) {
+  return value !== null && typeof value === 'object' && !getPrototypeOf(value);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isString
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `String`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `String`.
+ */
+function isString(value) {return typeof value === 'string';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isNumber
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Number`.
+ *
+ * This includes the "special" numbers `NaN`, `+Infinity` and `-Infinity`.
+ *
+ * If you wish to exclude these then you can use the native
+ * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite)
+ * method.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Number`.
+ */
+function isNumber(value) {return typeof value === 'number';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDate
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a value is a date.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Date`.
+ */
+function isDate(value) {
+  return toString.call(value) === '[object Date]';
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isArray
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Array`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Array`.
+ */
+var isArray = Array.isArray;
+
+/**
+ * @ngdoc function
+ * @name angular.isFunction
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Function`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Function`.
+ */
+function isFunction(value) {return typeof value === 'function';}
+
+
+/**
+ * Determines if a value is a regular expression object.
+ *
+ * @private
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `RegExp`.
+ */
+function isRegExp(value) {
+  return toString.call(value) === '[object RegExp]';
+}
+
+
+/**
+ * Checks if `obj` is a window object.
+ *
+ * @private
+ * @param {*} obj Object to check
+ * @returns {boolean} True if `obj` is a window obj.
+ */
+function isWindow(obj) {
+  return obj && obj.window === obj;
+}
+
+
+function isScope(obj) {
+  return obj && obj.$evalAsync && obj.$watch;
+}
+
+
+function isFile(obj) {
+  return toString.call(obj) === '[object File]';
+}
+
+
+function isFormData(obj) {
+  return toString.call(obj) === '[object FormData]';
+}
+
+
+function isBlob(obj) {
+  return toString.call(obj) === '[object Blob]';
+}
+
+
+function isBoolean(value) {
+  return typeof value === 'boolean';
+}
+
+
+function isPromiseLike(obj) {
+  return obj && isFunction(obj.then);
+}
+
+
+var TYPED_ARRAY_REGEXP = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/;
+function isTypedArray(value) {
+  return value && isNumber(value.length) && TYPED_ARRAY_REGEXP.test(toString.call(value));
+}
+
+function isArrayBuffer(obj) {
+  return toString.call(obj) === '[object ArrayBuffer]';
+}
+
+
+var trim = function(value) {
+  return isString(value) ? value.trim() : value;
+};
+
+// Copied from:
+// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
+// Prereq: s is a string.
+var escapeForRegexp = function(s) {
+  return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
+           replace(/\x08/g, '\\x08');
+};
+
+
+/**
+ * @ngdoc function
+ * @name angular.isElement
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a DOM element (or wrapped jQuery element).
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
+ */
+function isElement(node) {
+  return !!(node &&
+    (node.nodeName  // we are a direct element
+    || (node.prop && node.attr && node.find)));  // we have an on and find method part of jQuery API
+}
+
+/**
+ * @param str 'key1,key2,...'
+ * @returns {object} in the form of {key1:true, key2:true, ...}
+ */
+function makeMap(str) {
+  var obj = {}, items = str.split(','), i;
+  for (i = 0; i < items.length; i++) {
+    obj[items[i]] = true;
+  }
+  return obj;
+}
+
+
+function nodeName_(element) {
+  return lowercase(element.nodeName || (element[0] && element[0].nodeName));
+}
+
+function includes(array, obj) {
+  return Array.prototype.indexOf.call(array, obj) != -1;
+}
+
+function arrayRemove(array, value) {
+  var index = array.indexOf(value);
+  if (index >= 0) {
+    array.splice(index, 1);
+  }
+  return index;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.copy
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Creates a deep copy of `source`, which should be an object or an array.
+ *
+ * * If no destination is supplied, a copy of the object or array is created.
+ * * If a destination is provided, all of its elements (for arrays) or properties (for objects)
+ *   are deleted and then all elements/properties from the source are copied to it.
+ * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
+ * * If `source` is identical to 'destination' an exception will be thrown.
+ *
+ * @param {*} source The source that will be used to make a copy.
+ *                   Can be any type, including primitives, `null`, and `undefined`.
+ * @param {(Object|Array)=} destination Destination into which the source is copied. If
+ *     provided, must be of the same type as `source`.
+ * @returns {*} The copy or updated `destination`, if `destination` was specified.
+ *
+ * @example
+ <example module="copyExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form novalidate class="simple-form">
+ Name: <input type="text" ng-model="user.name" /><br />
+ E-mail: <input type="email" ng-model="user.email" /><br />
+ Gender: <input type="radio" ng-model="user.gender" value="male" />male
+ <input type="radio" ng-model="user.gender" value="female" />female<br />
+ <button ng-click="reset()">RESET</button>
+ <button ng-click="update(user)">SAVE</button>
+ </form>
+ <pre>form = {{user | json}}</pre>
+ <pre>master = {{master | json}}</pre>
+ </div>
+
+ <script>
+  angular.module('copyExample', [])
+    .controller('ExampleController', ['$scope', function($scope) {
+      $scope.master= {};
+
+      $scope.update = function(user) {
+        // Example with 1 argument
+        $scope.master= angular.copy(user);
+      };
+
+      $scope.reset = function() {
+        // Example with 2 arguments
+        angular.copy($scope.master, $scope.user);
+      };
+
+      $scope.reset();
+    }]);
+ </script>
+ </file>
+ </example>
+ */
+function copy(source, destination) {
+  var stackSource = [];
+  var stackDest = [];
+
+  if (destination) {
+    if (isTypedArray(destination) || isArrayBuffer(destination)) {
+      throw ngMinErr('cpta', "Can't copy! TypedArray destination cannot be mutated.");
+    }
+    if (source === destination) {
+      throw ngMinErr('cpi', "Can't copy! Source and destination are identical.");
+    }
+
+    // Empty the destination object
+    if (isArray(destination)) {
+      destination.length = 0;
+    } else {
+      forEach(destination, function(value, key) {
+        if (key !== '$$hashKey') {
+          delete destination[key];
+        }
+      });
+    }
+
+    stackSource.push(source);
+    stackDest.push(destination);
+    return copyRecurse(source, destination);
+  }
+
+  return copyElement(source);
+
+  function copyRecurse(source, destination) {
+    var h = destination.$$hashKey;
+    var result, key;
+    if (isArray(source)) {
+      for (var i = 0, ii = source.length; i < ii; i++) {
+        destination.push(copyElement(source[i]));
+      }
+    } else if (isBlankObject(source)) {
+      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+      for (key in source) {
+        destination[key] = copyElement(source[key]);
+      }
+    } else if (source && typeof source.hasOwnProperty === 'function') {
+      // Slow path, which must rely on hasOwnProperty
+      for (key in source) {
+        if (source.hasOwnProperty(key)) {
+          destination[key] = copyElement(source[key]);
+        }
+      }
+    } else {
+      // Slowest path --- hasOwnProperty can't be called as a method
+      for (key in source) {
+        if (hasOwnProperty.call(source, key)) {
+          destination[key] = copyElement(source[key]);
+        }
+      }
+    }
+    setHashKey(destination, h);
+    return destination;
+  }
+
+  function copyElement(source) {
+    // Simple values
+    if (!isObject(source)) {
+      return source;
+    }
+
+    // Already copied values
+    var index = stackSource.indexOf(source);
+    if (index !== -1) {
+      return stackDest[index];
+    }
+
+    if (isWindow(source) || isScope(source)) {
+      throw ngMinErr('cpws',
+        "Can't copy! Making copies of Window or Scope instances is not supported.");
+    }
+
+    var needsRecurse = false;
+    var destination = copyType(source);
+
+    if (destination === undefined) {
+      destination = isArray(source) ? [] : Object.create(getPrototypeOf(source));
+      needsRecurse = true;
+    }
+
+    stackSource.push(source);
+    stackDest.push(destination);
+
+    return needsRecurse
+      ? copyRecurse(source, destination)
+      : destination;
+  }
+
+  function copyType(source) {
+    switch (toString.call(source)) {
+      case '[object Int8Array]':
+      case '[object Int16Array]':
+      case '[object Int32Array]':
+      case '[object Float32Array]':
+      case '[object Float64Array]':
+      case '[object Uint8Array]':
+      case '[object Uint8ClampedArray]':
+      case '[object Uint16Array]':
+      case '[object Uint32Array]':
+        return new source.constructor(copyElement(source.buffer));
+
+      case '[object ArrayBuffer]':
+        //Support: IE10
+        if (!source.slice) {
+          var copied = new ArrayBuffer(source.byteLength);
+          new Uint8Array(copied).set(new Uint8Array(source));
+          return copied;
+        }
+        return source.slice(0);
+
+      case '[object Boolean]':
+      case '[object Number]':
+      case '[object String]':
+      case '[object Date]':
+        return new source.constructor(source.valueOf());
+
+      case '[object RegExp]':
+        var re = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
+        re.lastIndex = source.lastIndex;
+        return re;
+    }
+
+    if (isFunction(source.cloneNode)) {
+      return source.cloneNode(true);
+    }
+  }
+}
+
+/**
+ * Creates a shallow copy of an object, an array or a primitive.
+ *
+ * Assumes that there are no proto properties for objects.
+ */
+function shallowCopy(src, dst) {
+  if (isArray(src)) {
+    dst = dst || [];
+
+    for (var i = 0, ii = src.length; i < ii; i++) {
+      dst[i] = src[i];
+    }
+  } else if (isObject(src)) {
+    dst = dst || {};
+
+    for (var key in src) {
+      if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+        dst[key] = src[key];
+      }
+    }
+  }
+
+  return dst || src;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.equals
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if two objects or two values are equivalent. Supports value types, regular
+ * expressions, arrays and objects.
+ *
+ * Two objects or values are considered equivalent if at least one of the following is true:
+ *
+ * * Both objects or values pass `===` comparison.
+ * * Both objects or values are of the same type and all of their properties are equal by
+ *   comparing them with `angular.equals`.
+ * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
+ * * Both values represent the same regular expression (In JavaScript,
+ *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
+ *   representation matches).
+ *
+ * During a property comparison, properties of `function` type and properties with names
+ * that begin with `$` are ignored.
+ *
+ * Scope and DOMWindow objects are being compared only by identify (`===`).
+ *
+ * @param {*} o1 Object or value to compare.
+ * @param {*} o2 Object or value to compare.
+ * @returns {boolean} True if arguments are equal.
+ */
+function equals(o1, o2) {
+  if (o1 === o2) return true;
+  if (o1 === null || o2 === null) return false;
+  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
+  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
+  if (t1 == t2 && t1 == 'object') {
+    if (isArray(o1)) {
+      if (!isArray(o2)) return false;
+      if ((length = o1.length) == o2.length) {
+        for (key = 0; key < length; key++) {
+          if (!equals(o1[key], o2[key])) return false;
+        }
+        return true;
+      }
+    } else if (isDate(o1)) {
+      if (!isDate(o2)) return false;
+      return equals(o1.getTime(), o2.getTime());
+    } else if (isRegExp(o1)) {
+      if (!isRegExp(o2)) return false;
+      return o1.toString() == o2.toString();
+    } else {
+      if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
+        isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
+      keySet = createMap();
+      for (key in o1) {
+        if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
+        if (!equals(o1[key], o2[key])) return false;
+        keySet[key] = true;
+      }
+      for (key in o2) {
+        if (!(key in keySet) &&
+            key.charAt(0) !== '$' &&
+            isDefined(o2[key]) &&
+            !isFunction(o2[key])) return false;
+      }
+      return true;
+    }
+  }
+  return false;
+}
+
+var csp = function() {
+  if (!isDefined(csp.rules)) {
+
+
+    var ngCspElement = (document.querySelector('[ng-csp]') ||
+                    document.querySelector('[data-ng-csp]'));
+
+    if (ngCspElement) {
+      var ngCspAttribute = ngCspElement.getAttribute('ng-csp') ||
+                    ngCspElement.getAttribute('data-ng-csp');
+      csp.rules = {
+        noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1),
+        noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1)
+      };
+    } else {
+      csp.rules = {
+        noUnsafeEval: noUnsafeEval(),
+        noInlineStyle: false
+      };
+    }
+  }
+
+  return csp.rules;
+
+  function noUnsafeEval() {
+    try {
+      /* jshint -W031, -W054 */
+      new Function('');
+      /* jshint +W031, +W054 */
+      return false;
+    } catch (e) {
+      return true;
+    }
+  }
+};
+
+/**
+ * @ngdoc directive
+ * @module ng
+ * @name ngJq
+ *
+ * @element ANY
+ * @param {string=} ngJq the name of the library available under `window`
+ * to be used for angular.element
+ * @description
+ * Use this directive to force the angular.element library.  This should be
+ * used to force either jqLite by leaving ng-jq blank or setting the name of
+ * the jquery variable under window (eg. jQuery).
+ *
+ * Since angular looks for this directive when it is loaded (doesn't wait for the
+ * DOMContentLoaded event), it must be placed on an element that comes before the script
+ * which loads angular. Also, only the first instance of `ng-jq` will be used and all
+ * others ignored.
+ *
+ * @example
+ * This example shows how to force jqLite using the `ngJq` directive to the `html` tag.
+ ```html
+ <!doctype html>
+ <html ng-app ng-jq>
+ ...
+ ...
+ </html>
+ ```
+ * @example
+ * This example shows how to use a jQuery based library of a different name.
+ * The library name must be available at the top most 'window'.
+ ```html
+ <!doctype html>
+ <html ng-app ng-jq="jQueryLib">
+ ...
+ ...
+ </html>
+ ```
+ */
+var jq = function() {
+  if (isDefined(jq.name_)) return jq.name_;
+  var el;
+  var i, ii = ngAttrPrefixes.length, prefix, name;
+  for (i = 0; i < ii; ++i) {
+    prefix = ngAttrPrefixes[i];
+    if (el = document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]')) {
+      name = el.getAttribute(prefix + 'jq');
+      break;
+    }
+  }
+
+  return (jq.name_ = name);
+};
+
+function concat(array1, array2, index) {
+  return array1.concat(slice.call(array2, index));
+}
+
+function sliceArgs(args, startIndex) {
+  return slice.call(args, startIndex || 0);
+}
+
+
+/* jshint -W101 */
+/**
+ * @ngdoc function
+ * @name angular.bind
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
+ * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
+ * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
+ * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
+ *
+ * @param {Object} self Context which `fn` should be evaluated in.
+ * @param {function()} fn Function to be bound.
+ * @param {...*} args Optional arguments to be prebound to the `fn` function call.
+ * @returns {function()} Function that wraps the `fn` with all the specified bindings.
+ */
+/* jshint +W101 */
+function bind(self, fn) {
+  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
+  if (isFunction(fn) && !(fn instanceof RegExp)) {
+    return curryArgs.length
+      ? function() {
+          return arguments.length
+            ? fn.apply(self, concat(curryArgs, arguments, 0))
+            : fn.apply(self, curryArgs);
+        }
+      : function() {
+          return arguments.length
+            ? fn.apply(self, arguments)
+            : fn.call(self);
+        };
+  } else {
+    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
+    return fn;
+  }
+}
+
+
+function toJsonReplacer(key, value) {
+  var val = value;
+
+  if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
+    val = undefined;
+  } else if (isWindow(value)) {
+    val = '$WINDOW';
+  } else if (value &&  document === value) {
+    val = '$DOCUMENT';
+  } else if (isScope(value)) {
+    val = '$SCOPE';
+  }
+
+  return val;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.toJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
+ * stripped since angular uses this notation internally.
+ *
+ * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
+ * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace.
+ *    If set to an integer, the JSON output will contain that many spaces per indentation.
+ * @returns {string|undefined} JSON-ified string representing `obj`.
+ */
+function toJson(obj, pretty) {
+  if (isUndefined(obj)) return undefined;
+  if (!isNumber(pretty)) {
+    pretty = pretty ? 2 : null;
+  }
+  return JSON.stringify(obj, toJsonReplacer, pretty);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.fromJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Deserializes a JSON string.
+ *
+ * @param {string} json JSON string to deserialize.
+ * @returns {Object|Array|string|number} Deserialized JSON string.
+ */
+function fromJson(json) {
+  return isString(json)
+      ? JSON.parse(json)
+      : json;
+}
+
+
+var ALL_COLONS = /:/g;
+function timezoneToOffset(timezone, fallback) {
+  // IE/Edge do not "understand" colon (`:`) in timezone
+  timezone = timezone.replace(ALL_COLONS, '');
+  var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
+  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
+}
+
+
+function addDateMinutes(date, minutes) {
+  date = new Date(date.getTime());
+  date.setMinutes(date.getMinutes() + minutes);
+  return date;
+}
+
+
+function convertTimezoneToLocal(date, timezone, reverse) {
+  reverse = reverse ? -1 : 1;
+  var dateTimezoneOffset = date.getTimezoneOffset();
+  var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
+  return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));
+}
+
+
+/**
+ * @returns {string} Returns the string representation of the element.
+ */
+function startingTag(element) {
+  element = jqLite(element).clone();
+  try {
+    // turns out IE does not let you set .html() on elements which
+    // are not allowed to have children. So we just ignore it.
+    element.empty();
+  } catch (e) {}
+  var elemHtml = jqLite('<div>').append(element).html();
+  try {
+    return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
+        elemHtml.
+          match(/^(<[^>]+>)/)[1].
+          replace(/^<([\w\-]+)/, function(match, nodeName) {return '<' + lowercase(nodeName);});
+  } catch (e) {
+    return lowercase(elemHtml);
+  }
+
+}
+
+
+/////////////////////////////////////////////////
+
+/**
+ * Tries to decode the URI component without throwing an exception.
+ *
+ * @private
+ * @param str value potential URI component to check.
+ * @returns {boolean} True if `value` can be decoded
+ * with the decodeURIComponent function.
+ */
+function tryDecodeURIComponent(value) {
+  try {
+    return decodeURIComponent(value);
+  } catch (e) {
+    // Ignore any invalid uri component
+  }
+}
+
+
+/**
+ * Parses an escaped url query string into key-value pairs.
+ * @returns {Object.<string,boolean|Array>}
+ */
+function parseKeyValue(/**string*/keyValue) {
+  var obj = {};
+  forEach((keyValue || "").split('&'), function(keyValue) {
+    var splitPoint, key, val;
+    if (keyValue) {
+      key = keyValue = keyValue.replace(/\+/g,'%20');
+      splitPoint = keyValue.indexOf('=');
+      if (splitPoint !== -1) {
+        key = keyValue.substring(0, splitPoint);
+        val = keyValue.substring(splitPoint + 1);
+      }
+      key = tryDecodeURIComponent(key);
+      if (isDefined(key)) {
+        val = isDefined(val) ? tryDecodeURIComponent(val) : true;
+        if (!hasOwnProperty.call(obj, key)) {
+          obj[key] = val;
+        } else if (isArray(obj[key])) {
+          obj[key].push(val);
+        } else {
+          obj[key] = [obj[key],val];
+        }
+      }
+    }
+  });
+  return obj;
+}
+
+function toKeyValue(obj) {
+  var parts = [];
+  forEach(obj, function(value, key) {
+    if (isArray(value)) {
+      forEach(value, function(arrayValue) {
+        parts.push(encodeUriQuery(key, true) +
+                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
+      });
+    } else {
+    parts.push(encodeUriQuery(key, true) +
+               (value === true ? '' : '=' + encodeUriQuery(value, true)));
+    }
+  });
+  return parts.length ? parts.join('&') : '';
+}
+
+
+/**
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ *    segment       = *pchar
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriSegment(val) {
+  return encodeUriQuery(val, true).
+             replace(/%26/gi, '&').
+             replace(/%3D/gi, '=').
+             replace(/%2B/gi, '+');
+}
+
+
+/**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ *    query       = *( pchar / "/" / "?" )
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriQuery(val, pctEncodeSpaces) {
+  return encodeURIComponent(val).
+             replace(/%40/gi, '@').
+             replace(/%3A/gi, ':').
+             replace(/%24/g, '$').
+             replace(/%2C/gi, ',').
+             replace(/%3B/gi, ';').
+             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+}
+
+var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
+
+function getNgAttribute(element, ngAttr) {
+  var attr, i, ii = ngAttrPrefixes.length;
+  for (i = 0; i < ii; ++i) {
+    attr = ngAttrPrefixes[i] + ngAttr;
+    if (isString(attr = element.getAttribute(attr))) {
+      return attr;
+    }
+  }
+  return null;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngApp
+ * @module ng
+ *
+ * @element ANY
+ * @param {angular.Module} ngApp an optional application
+ *   {@link angular.module module} name to load.
+ * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
+ *   created in "strict-di" mode. This means that the application will fail to invoke functions which
+ *   do not use explicit function annotation (and are thus unsuitable for minification), as described
+ *   in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
+ *   tracking down the root of these bugs.
+ *
+ * @description
+ *
+ * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
+ * designates the **root element** of the application and is typically placed near the root element
+ * of the page - e.g. on the `<body>` or `<html>` tags.
+ *
+ * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
+ * found in the document will be used to define the root element to auto-bootstrap as an
+ * application. To run multiple applications in an HTML document you must manually bootstrap them using
+ * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
+ *
+ * You can specify an **AngularJS module** to be used as the root module for the application.  This
+ * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
+ * should contain the application code needed or have dependencies on other modules that will
+ * contain the code. See {@link angular.module} for more information.
+ *
+ * In the example below if the `ngApp` directive were not placed on the `html` element then the
+ * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
+ * would not be resolved to `3`.
+ *
+ * `ngApp` is the easiest, and most common way to bootstrap an application.
+ *
+ <example module="ngAppDemo">
+   <file name="index.html">
+   <div ng-controller="ngAppDemoController">
+     I can add: {{a}} + {{b}} =  {{ a+b }}
+   </div>
+   </file>
+   <file name="script.js">
+   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
+     $scope.a = 1;
+     $scope.b = 2;
+   });
+   </file>
+ </example>
+ *
+ * Using `ngStrictDi`, you would see something like this:
+ *
+ <example ng-app-included="true">
+   <file name="index.html">
+   <div ng-app="ngAppStrictDemo" ng-strict-di>
+       <div ng-controller="GoodController1">
+           I can add: {{a}} + {{b}} =  {{ a+b }}
+
+           <p>This renders because the controller does not fail to
+              instantiate, by using explicit annotation style (see
+              script.js for details)
+           </p>
+       </div>
+
+       <div ng-controller="GoodController2">
+           Name: <input ng-model="name"><br />
+           Hello, {{name}}!
+
+           <p>This renders because the controller does not fail to
+              instantiate, by using explicit annotation style
+              (see script.js for details)
+           </p>
+       </div>
+
+       <div ng-controller="BadController">
+           I can add: {{a}} + {{b}} =  {{ a+b }}
+
+           <p>The controller could not be instantiated, due to relying
+              on automatic function annotations (which are disabled in
+              strict mode). As such, the content of this section is not
+              interpolated, and there should be an error in your web console.
+           </p>
+       </div>
+   </div>
+   </file>
+   <file name="script.js">
+   angular.module('ngAppStrictDemo', [])
+     // BadController will fail to instantiate, due to relying on automatic function annotation,
+     // rather than an explicit annotation
+     .controller('BadController', function($scope) {
+       $scope.a = 1;
+       $scope.b = 2;
+     })
+     // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
+     // due to using explicit annotations using the array style and $inject property, respectively.
+     .controller('GoodController1', ['$scope', function($scope) {
+       $scope.a = 1;
+       $scope.b = 2;
+     }])
+     .controller('GoodController2', GoodController2);
+     function GoodController2($scope) {
+       $scope.name = "World";
+     }
+     GoodController2.$inject = ['$scope'];
+   </file>
+   <file name="style.css">
+   div[ng-controller] {
+       margin-bottom: 1em;
+       -webkit-border-radius: 4px;
+       border-radius: 4px;
+       border: 1px solid;
+       padding: .5em;
+   }
+   div[ng-controller^=Good] {
+       border-color: #d6e9c6;
+       background-color: #dff0d8;
+       color: #3c763d;
+   }
+   div[ng-controller^=Bad] {
+       border-color: #ebccd1;
+       background-color: #f2dede;
+       color: #a94442;
+       margin-bottom: 0;
+   }
+   </file>
+ </example>
+ */
+function angularInit(element, bootstrap) {
+  var appElement,
+      module,
+      config = {};
+
+  // The element `element` has priority over any other element
+  forEach(ngAttrPrefixes, function(prefix) {
+    var name = prefix + 'app';
+
+    if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
+      appElement = element;
+      module = element.getAttribute(name);
+    }
+  });
+  forEach(ngAttrPrefixes, function(prefix) {
+    var name = prefix + 'app';
+    var candidate;
+
+    if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
+      appElement = candidate;
+      module = candidate.getAttribute(name);
+    }
+  });
+  if (appElement) {
+    config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
+    bootstrap(appElement, module ? [module] : [], config);
+  }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.bootstrap
+ * @module ng
+ * @description
+ * Use this function to manually start up angular application.
+ *
+ * See: {@link guide/bootstrap Bootstrap}
+ *
+ * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
+ * They must use {@link ng.directive:ngApp ngApp}.
+ *
+ * Angular will detect if it has been loaded into the browser more than once and only allow the
+ * first loaded script to be bootstrapped and will report a warning to the browser console for
+ * each of the subsequent scripts. This prevents strange results in applications, where otherwise
+ * multiple instances of Angular try to work on the DOM.
+ *
+ * ```html
+ * <!doctype html>
+ * <html>
+ * <body>
+ * <div ng-controller="WelcomeController">
+ *   {{greeting}}
+ * </div>
+ *
+ * <script src="angular.js"></script>
+ * <script>
+ *   var app = angular.module('demo', [])
+ *   .controller('WelcomeController', function($scope) {
+ *       $scope.greeting = 'Welcome!';
+ *   });
+ *   angular.bootstrap(document, ['demo']);
+ * </script>
+ * </body>
+ * </html>
+ * ```
+ *
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
+ *     Each item in the array should be the name of a predefined module or a (DI annotated)
+ *     function that will be invoked by the injector as a `config` block.
+ *     See: {@link angular.module modules}
+ * @param {Object=} config an object for defining configuration options for the application. The
+ *     following keys are supported:
+ *
+ * * `strictDi` - disable automatic function annotation for the application. This is meant to
+ *   assist in finding bugs which break minified code. Defaults to `false`.
+ *
+ * @returns {auto.$injector} Returns the newly created injector for this app.
+ */
+function bootstrap(element, modules, config) {
+  if (!isObject(config)) config = {};
+  var defaultConfig = {
+    strictDi: false
+  };
+  config = extend(defaultConfig, config);
+  var doBootstrap = function() {
+    element = jqLite(element);
+
+    if (element.injector()) {
+      var tag = (element[0] === document) ? 'document' : startingTag(element);
+      //Encode angle brackets to prevent input from being sanitized to empty string #8683
+      throw ngMinErr(
+          'btstrpd',
+          "App Already Bootstrapped with this Element '{0}'",
+          tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
+    }
+
+    modules = modules || [];
+    modules.unshift(['$provide', function($provide) {
+      $provide.value('$rootElement', element);
+    }]);
+
+    if (config.debugInfoEnabled) {
+      // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
+      modules.push(['$compileProvider', function($compileProvider) {
+        $compileProvider.debugInfoEnabled(true);
+      }]);
+    }
+
+    modules.unshift('ng');
+    var injector = createInjector(modules, config.strictDi);
+    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
+       function bootstrapApply(scope, element, compile, injector) {
+        scope.$apply(function() {
+          element.data('$injector', injector);
+          compile(element)(scope);
+        });
+      }]
+    );
+    return injector;
+  };
+
+  var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
+  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
+
+  if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
+    config.debugInfoEnabled = true;
+    window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
+  }
+
+  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
+    return doBootstrap();
+  }
+
+  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
+  angular.resumeBootstrap = function(extraModules) {
+    forEach(extraModules, function(module) {
+      modules.push(module);
+    });
+    return doBootstrap();
+  };
+
+  if (isFunction(angular.resumeDeferredBootstrap)) {
+    angular.resumeDeferredBootstrap();
+  }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.reloadWithDebugInfo
+ * @module ng
+ * @description
+ * Use this function to reload the current application with debug information turned on.
+ * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
+ *
+ * See {@link ng.$compileProvider#debugInfoEnabled} for more.
+ */
+function reloadWithDebugInfo() {
+  window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
+  window.location.reload();
+}
+
+/**
+ * @name angular.getTestability
+ * @module ng
+ * @description
+ * Get the testability service for the instance of Angular on the given
+ * element.
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ */
+function getTestability(rootElement) {
+  var injector = angular.element(rootElement).injector();
+  if (!injector) {
+    throw ngMinErr('test',
+      'no injector found for element argument to getTestability');
+  }
+  return injector.get('$$testability');
+}
+
+var SNAKE_CASE_REGEXP = /[A-Z]/g;
+function snake_case(name, separator) {
+  separator = separator || '_';
+  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
+    return (pos ? separator : '') + letter.toLowerCase();
+  });
+}
+
+var bindJQueryFired = false;
+function bindJQuery() {
+  var originalCleanData;
+
+  if (bindJQueryFired) {
+    return;
+  }
+
+  // bind to jQuery if present;
+  var jqName = jq();
+  jQuery = isUndefined(jqName) ? window.jQuery :   // use jQuery (if present)
+           !jqName             ? undefined     :   // use jqLite
+                                 window[jqName];   // use jQuery specified by `ngJq`
+
+  // Use jQuery if it exists with proper functionality, otherwise default to us.
+  // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
+  // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
+  // versions. It will not work for sure with jQuery <1.7, though.
+  if (jQuery && jQuery.fn.on) {
+    jqLite = jQuery;
+    extend(jQuery.fn, {
+      scope: JQLitePrototype.scope,
+      isolateScope: JQLitePrototype.isolateScope,
+      controller: JQLitePrototype.controller,
+      injector: JQLitePrototype.injector,
+      inheritedData: JQLitePrototype.inheritedData
+    });
+
+    // All nodes removed from the DOM via various jQuery APIs like .remove()
+    // are passed through jQuery.cleanData. Monkey-patch this method to fire
+    // the $destroy event on all removed nodes.
+    originalCleanData = jQuery.cleanData;
+    jQuery.cleanData = function(elems) {
+      var events;
+      for (var i = 0, elem; (elem = elems[i]) != null; i++) {
+        events = jQuery._data(elem, "events");
+        if (events && events.$destroy) {
+          jQuery(elem).triggerHandler('$destroy');
+        }
+      }
+      originalCleanData(elems);
+    };
+  } else {
+    jqLite = JQLite;
+  }
+
+  angular.element = jqLite;
+
+  // Prevent double-proxying.
+  bindJQueryFired = true;
+}
+
+/**
+ * throw error if the argument is falsy.
+ */
+function assertArg(arg, name, reason) {
+  if (!arg) {
+    throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+  }
+  return arg;
+}
+
+function assertArgFn(arg, name, acceptArrayAnnotation) {
+  if (acceptArrayAnnotation && isArray(arg)) {
+      arg = arg[arg.length - 1];
+  }
+
+  assertArg(isFunction(arg), name, 'not a function, got ' +
+      (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
+  return arg;
+}
+
+/**
+ * throw error if the name given is hasOwnProperty
+ * @param  {String} name    the name to test
+ * @param  {String} context the context in which the name is used, such as module or directive
+ */
+function assertNotHasOwnProperty(name, context) {
+  if (name === 'hasOwnProperty') {
+    throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
+  }
+}
+
+/**
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
+ * @param {Object} obj starting object
+ * @param {String} path path to traverse
+ * @param {boolean} [bindFnToScope=true]
+ * @returns {Object} value as accessible by path
+ */
+//TODO(misko): this function needs to be removed
+function getter(obj, path, bindFnToScope) {
+  if (!path) return obj;
+  var keys = path.split('.');
+  var key;
+  var lastInstance = obj;
+  var len = keys.length;
+
+  for (var i = 0; i < len; i++) {
+    key = keys[i];
+    if (obj) {
+      obj = (lastInstance = obj)[key];
+    }
+  }
+  if (!bindFnToScope && isFunction(obj)) {
+    return bind(lastInstance, obj);
+  }
+  return obj;
+}
+
+/**
+ * Return the DOM siblings between the first and last node in the given array.
+ * @param {Array} array like object
+ * @returns {Array} the inputted object or a jqLite collection containing the nodes
+ */
+function getBlockNodes(nodes) {
+  // TODO(perf): update `nodes` instead of creating a new object?
+  var node = nodes[0];
+  var endNode = nodes[nodes.length - 1];
+  var blockNodes;
+
+  for (var i = 1; node !== endNode && (node = node.nextSibling); i++) {
+    if (blockNodes || nodes[i] !== node) {
+      if (!blockNodes) {
+        blockNodes = jqLite(slice.call(nodes, 0, i));
+      }
+      blockNodes.push(node);
+    }
+  }
+
+  return blockNodes || nodes;
+}
+
+
+/**
+ * Creates a new object without a prototype. This object is useful for lookup without having to
+ * guard against prototypically inherited properties via hasOwnProperty.
+ *
+ * Related micro-benchmarks:
+ * - http://jsperf.com/object-create2
+ * - http://jsperf.com/proto-map-lookup/2
+ * - http://jsperf.com/for-in-vs-object-keys2
+ *
+ * @returns {Object}
+ */
+function createMap() {
+  return Object.create(null);
+}
+
+var NODE_TYPE_ELEMENT = 1;
+var NODE_TYPE_ATTRIBUTE = 2;
+var NODE_TYPE_TEXT = 3;
+var NODE_TYPE_COMMENT = 8;
+var NODE_TYPE_DOCUMENT = 9;
+var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
+
+/**
+ * @ngdoc type
+ * @name angular.Module
+ * @module ng
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+  var $injectorMinErr = minErr('$injector');
+  var ngMinErr = minErr('ng');
+
+  function ensure(obj, name, factory) {
+    return obj[name] || (obj[name] = factory());
+  }
+
+  var angular = ensure(window, 'angular', Object);
+
+  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
+  angular.$$minErr = angular.$$minErr || minErr;
+
+  return ensure(angular, 'module', function() {
+    /** @type {Object.<string, angular.Module>} */
+    var modules = {};
+
+    /**
+     * @ngdoc function
+     * @name angular.module
+     * @module ng
+     * @description
+     *
+     * The `angular.module` is a global place for creating, registering and retrieving Angular
+     * modules.
+     * All modules (angular core or 3rd party) that should be available to an application must be
+     * registered using this mechanism.
+     *
+     * Passing one argument retrieves an existing {@link angular.Module},
+     * whereas passing more than one argument creates a new {@link angular.Module}
+     *
+     *
+     * # Module
+     *
+     * A module is a collection of services, directives, controllers, filters, and configuration information.
+     * `angular.module` is used to configure the {@link auto.$injector $injector}.
+     *
+     * ```js
+     * // Create a new module
+     * var myModule = angular.module('myModule', []);
+     *
+     * // register a new service
+     * myModule.value('appName', 'MyCoolApp');
+     *
+     * // configure existing services inside initialization blocks.
+     * myModule.config(['$locationProvider', function($locationProvider) {
+     *   // Configure existing providers
+     *   $locationProvider.hashPrefix('!');
+     * }]);
+     * ```
+     *
+     * Then you can create an injector and load your modules like this:
+     *
+     * ```js
+     * var injector = angular.injector(['ng', 'myModule'])
+     * ```
+     *
+     * However it's more likely that you'll just use
+     * {@link ng.directive:ngApp ngApp} or
+     * {@link angular.bootstrap} to simplify this process for you.
+     *
+     * @param {!string} name The name of the module to create or retrieve.
+     * @param {!Array.<string>=} requires If specified then new module is being created. If
+     *        unspecified then the module is being retrieved for further configuration.
+     * @param {Function=} configFn Optional configuration function for the module. Same as
+     *        {@link angular.Module#config Module#config()}.
+     * @returns {angular.Module} new module with the {@link angular.Module} api.
+     */
+    return function module(name, requires, configFn) {
+      var assertNotHasOwnProperty = function(name, context) {
+        if (name === 'hasOwnProperty') {
+          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
+        }
+      };
+
+      assertNotHasOwnProperty(name, 'module');
+      if (requires && modules.hasOwnProperty(name)) {
+        modules[name] = null;
+      }
+      return ensure(modules, name, function() {
+        if (!requires) {
+          throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
+             "the module name or forgot to load it. If registering a module ensure that you " +
+             "specify the dependencies as the second argument.", name);
+        }
+
+        /** @type {!Array.<Array.<*>>} */
+        var invokeQueue = [];
+
+        /** @type {!Array.<Function>} */
+        var configBlocks = [];
+
+        /** @type {!Array.<Function>} */
+        var runBlocks = [];
+
+        var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
+
+        /** @type {angular.Module} */
+        var moduleInstance = {
+          // Private state
+          _invokeQueue: invokeQueue,
+          _configBlocks: configBlocks,
+          _runBlocks: runBlocks,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#requires
+           * @module ng
+           *
+           * @description
+           * Holds the list of modules which the injector will load before the current module is
+           * loaded.
+           */
+          requires: requires,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#name
+           * @module ng
+           *
+           * @description
+           * Name of the module.
+           */
+          name: name,
+
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#provider
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerType Construction function for creating new instance of the
+           *                                service.
+           * @description
+           * See {@link auto.$provide#provider $provide.provider()}.
+           */
+          provider: invokeLaterAndSetModuleName('$provide', 'provider'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#factory
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerFunction Function for creating new instance of the service.
+           * @description
+           * See {@link auto.$provide#factory $provide.factory()}.
+           */
+          factory: invokeLaterAndSetModuleName('$provide', 'factory'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#service
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} constructor A constructor function that will be instantiated.
+           * @description
+           * See {@link auto.$provide#service $provide.service()}.
+           */
+          service: invokeLaterAndSetModuleName('$provide', 'service'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#value
+           * @module ng
+           * @param {string} name service name
+           * @param {*} object Service instance object.
+           * @description
+           * See {@link auto.$provide#value $provide.value()}.
+           */
+          value: invokeLater('$provide', 'value'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#constant
+           * @module ng
+           * @param {string} name constant name
+           * @param {*} object Constant value.
+           * @description
+           * Because the constants are fixed, they get applied before other provide methods.
+           * See {@link auto.$provide#constant $provide.constant()}.
+           */
+          constant: invokeLater('$provide', 'constant', 'unshift'),
+
+           /**
+           * @ngdoc method
+           * @name angular.Module#decorator
+           * @module ng
+           * @param {string} The name of the service to decorate.
+           * @param {Function} This function will be invoked when the service needs to be
+           *                                    instantiated and should return the decorated service instance.
+           * @description
+           * See {@link auto.$provide#decorator $provide.decorator()}.
+           */
+          decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#animation
+           * @module ng
+           * @param {string} name animation name
+           * @param {Function} animationFactory Factory function for creating new instance of an
+           *                                    animation.
+           * @description
+           *
+           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
+           *
+           *
+           * Defines an animation hook that can be later used with
+           * {@link $animate $animate} service and directives that use this service.
+           *
+           * ```js
+           * module.animation('.animation-name', function($inject1, $inject2) {
+           *   return {
+           *     eventName : function(element, done) {
+           *       //code to run the animation
+           *       //once complete, then run done()
+           *       return function cancellationFunction(element) {
+           *         //code to cancel the animation
+           *       }
+           *     }
+           *   }
+           * })
+           * ```
+           *
+           * See {@link ng.$animateProvider#register $animateProvider.register()} and
+           * {@link ngAnimate ngAnimate module} for more information.
+           */
+          animation: invokeLaterAndSetModuleName('$animateProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#filter
+           * @module ng
+           * @param {string} name Filter name - this must be a valid angular expression identifier
+           * @param {Function} filterFactory Factory function for creating new instance of filter.
+           * @description
+           * See {@link ng.$filterProvider#register $filterProvider.register()}.
+           *
+           * <div class="alert alert-warning">
+           * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+           * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+           * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+           * (`myapp_subsection_filterx`).
+           * </div>
+           */
+          filter: invokeLaterAndSetModuleName('$filterProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#controller
+           * @module ng
+           * @param {string|Object} name Controller name, or an object map of controllers where the
+           *    keys are the names and the values are the constructors.
+           * @param {Function} constructor Controller constructor function.
+           * @description
+           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+           */
+          controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#directive
+           * @module ng
+           * @param {string|Object} name Directive name, or an object map of directives where the
+           *    keys are the names and the values are the factories.
+           * @param {Function} directiveFactory Factory function for creating new instance of
+           * directives.
+           * @description
+           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
+           */
+          directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#component
+           * @module ng
+           * @param {string} name Name of the component in camel-case (i.e. myComp which will match as my-comp)
+           * @param {Object} options Component definition object (a simplified
+           *    {@link ng.$compile#directive-definition-object directive definition object})
+           *
+           * @description
+           * See {@link ng.$compileProvider#component $compileProvider.component()}.
+           */
+          component: invokeLaterAndSetModuleName('$compileProvider', 'component'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#config
+           * @module ng
+           * @param {Function} configFn Execute this function on module load. Useful for service
+           *    configuration.
+           * @description
+           * Use this method to register work which needs to be performed on module loading.
+           * For more about how to configure services, see
+           * {@link providers#provider-recipe Provider Recipe}.
+           */
+          config: config,
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#run
+           * @module ng
+           * @param {Function} initializationFn Execute this function after injector creation.
+           *    Useful for application initialization.
+           * @description
+           * Use this method to register work which should be performed when the injector is done
+           * loading all modules.
+           */
+          run: function(block) {
+            runBlocks.push(block);
+            return this;
+          }
+        };
+
+        if (configFn) {
+          config(configFn);
+        }
+
+        return moduleInstance;
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @param {String=} insertMethod
+         * @returns {angular.Module}
+         */
+        function invokeLater(provider, method, insertMethod, queue) {
+          if (!queue) queue = invokeQueue;
+          return function() {
+            queue[insertMethod || 'push']([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @returns {angular.Module}
+         */
+        function invokeLaterAndSetModuleName(provider, method) {
+          return function(recipeName, factoryFunction) {
+            if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
+            invokeQueue.push([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+      });
+    };
+  });
+
+}
+
+/* global: toDebugString: true */
+
+function serializeObject(obj) {
+  var seen = [];
+
+  return JSON.stringify(obj, function(key, val) {
+    val = toJsonReplacer(key, val);
+    if (isObject(val)) {
+
+      if (seen.indexOf(val) >= 0) return '...';
+
+      seen.push(val);
+    }
+    return val;
+  });
+}
+
+function toDebugString(obj) {
+  if (typeof obj === 'function') {
+    return obj.toString().replace(/ \{[\s\S]*$/, '');
+  } else if (isUndefined(obj)) {
+    return 'undefined';
+  } else if (typeof obj !== 'string') {
+    return serializeObject(obj);
+  }
+  return obj;
+}
+
+/* global angularModule: true,
+  version: true,
+
+  $CompileProvider,
+
+  htmlAnchorDirective,
+  inputDirective,
+  inputDirective,
+  formDirective,
+  scriptDirective,
+  selectDirective,
+  styleDirective,
+  optionDirective,
+  ngBindDirective,
+  ngBindHtmlDirective,
+  ngBindTemplateDirective,
+  ngClassDirective,
+  ngClassEvenDirective,
+  ngClassOddDirective,
+  ngCloakDirective,
+  ngControllerDirective,
+  ngFormDirective,
+  ngHideDirective,
+  ngIfDirective,
+  ngIncludeDirective,
+  ngIncludeFillContentDirective,
+  ngInitDirective,
+  ngNonBindableDirective,
+  ngPluralizeDirective,
+  ngRepeatDirective,
+  ngShowDirective,
+  ngStyleDirective,
+  ngSwitchDirective,
+  ngSwitchWhenDirective,
+  ngSwitchDefaultDirective,
+  ngOptionsDirective,
+  ngTranscludeDirective,
+  ngModelDirective,
+  ngListDirective,
+  ngChangeDirective,
+  patternDirective,
+  patternDirective,
+  requiredDirective,
+  requiredDirective,
+  minlengthDirective,
+  minlengthDirective,
+  maxlengthDirective,
+  maxlengthDirective,
+  ngValueDirective,
+  ngModelOptionsDirective,
+  ngAttributeAliasDirectives,
+  ngEventDirectives,
+
+  $AnchorScrollProvider,
+  $AnimateProvider,
+  $CoreAnimateCssProvider,
+  $$CoreAnimateJsProvider,
+  $$CoreAnimateQueueProvider,
+  $$AnimateRunnerFactoryProvider,
+  $$AnimateAsyncRunFactoryProvider,
+  $BrowserProvider,
+  $CacheFactoryProvider,
+  $ControllerProvider,
+  $DateProvider,
+  $DocumentProvider,
+  $ExceptionHandlerProvider,
+  $FilterProvider,
+  $$ForceReflowProvider,
+  $InterpolateProvider,
+  $IntervalProvider,
+  $$HashMapProvider,
+  $HttpProvider,
+  $HttpParamSerializerProvider,
+  $HttpParamSerializerJQLikeProvider,
+  $HttpBackendProvider,
+  $xhrFactoryProvider,
+  $LocationProvider,
+  $LogProvider,
+  $ParseProvider,
+  $RootScopeProvider,
+  $QProvider,
+  $$QProvider,
+  $$SanitizeUriProvider,
+  $SceProvider,
+  $SceDelegateProvider,
+  $SnifferProvider,
+  $TemplateCacheProvider,
+  $TemplateRequestProvider,
+  $$TestabilityProvider,
+  $TimeoutProvider,
+  $$RAFProvider,
+  $WindowProvider,
+  $$jqLiteProvider,
+  $$CookieReaderProvider
+*/
+
+
+/**
+ * @ngdoc object
+ * @name angular.version
+ * @module ng
+ * @description
+ * An object that contains information about the current AngularJS version.
+ *
+ * This object has the following properties:
+ *
+ * - `full` \u2013 `{string}` \u2013 Full version string, such as "0.9.18".
+ * - `major` \u2013 `{number}` \u2013 Major version number, such as "0".
+ * - `minor` \u2013 `{number}` \u2013 Minor version number, such as "9".
+ * - `dot` \u2013 `{number}` \u2013 Dot version number, such as "18".
+ * - `codeName` \u2013 `{string}` \u2013 Code name of the release, such as "jiggling-armfat".
+ */
+var version = {
+  full: '1.5.0',    // all of these placeholder strings will be replaced by grunt's
+  major: 1,    // package task
+  minor: 5,
+  dot: 0,
+  codeName: 'ennoblement-facilitation'
+};
+
+
+function publishExternalAPI(angular) {
+  extend(angular, {
+    'bootstrap': bootstrap,
+    'copy': copy,
+    'extend': extend,
+    'merge': merge,
+    'equals': equals,
+    'element': jqLite,
+    'forEach': forEach,
+    'injector': createInjector,
+    'noop': noop,
+    'bind': bind,
+    'toJson': toJson,
+    'fromJson': fromJson,
+    'identity': identity,
+    'isUndefined': isUndefined,
+    'isDefined': isDefined,
+    'isString': isString,
+    'isFunction': isFunction,
+    'isObject': isObject,
+    'isNumber': isNumber,
+    'isElement': isElement,
+    'isArray': isArray,
+    'version': version,
+    'isDate': isDate,
+    'lowercase': lowercase,
+    'uppercase': uppercase,
+    'callbacks': {counter: 0},
+    'getTestability': getTestability,
+    '$$minErr': minErr,
+    '$$csp': csp,
+    'reloadWithDebugInfo': reloadWithDebugInfo
+  });
+
+  angularModule = setupModuleLoader(window);
+
+  angularModule('ng', ['ngLocale'], ['$provide',
+    function ngModule($provide) {
+      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
+      $provide.provider({
+        $$sanitizeUri: $$SanitizeUriProvider
+      });
+      $provide.provider('$compile', $CompileProvider).
+        directive({
+            a: htmlAnchorDirective,
+            input: inputDirective,
+            textarea: inputDirective,
+            form: formDirective,
+            script: scriptDirective,
+            select: selectDirective,
+            style: styleDirective,
+            option: optionDirective,
+            ngBind: ngBindDirective,
+            ngBindHtml: ngBindHtmlDirective,
+            ngBindTemplate: ngBindTemplateDirective,
+            ngClass: ngClassDirective,
+            ngClassEven: ngClassEvenDirective,
+            ngClassOdd: ngClassOddDirective,
+            ngCloak: ngCloakDirective,
+            ngController: ngControllerDirective,
+            ngForm: ngFormDirective,
+            ngHide: ngHideDirective,
+            ngIf: ngIfDirective,
+            ngInclude: ngIncludeDirective,
+            ngInit: ngInitDirective,
+            ngNonBindable: ngNonBindableDirective,
+            ngPluralize: ngPluralizeDirective,
+            ngRepeat: ngRepeatDirective,
+            ngShow: ngShowDirective,
+            ngStyle: ngStyleDirective,
+            ngSwitch: ngSwitchDirective,
+            ngSwitchWhen: ngSwitchWhenDirective,
+            ngSwitchDefault: ngSwitchDefaultDirective,
+            ngOptions: ngOptionsDirective,
+            ngTransclude: ngTranscludeDirective,
+            ngModel: ngModelDirective,
+            ngList: ngListDirective,
+            ngChange: ngChangeDirective,
+            pattern: patternDirective,
+            ngPattern: patternDirective,
+            required: requiredDirective,
+            ngRequired: requiredDirective,
+            minlength: minlengthDirective,
+            ngMinlength: minlengthDirective,
+            maxlength: maxlengthDirective,
+            ngMaxlength: maxlengthDirective,
+            ngValue: ngValueDirective,
+            ngModelOptions: ngModelOptionsDirective
+        }).
+        directive({
+          ngInclude: ngIncludeFillContentDirective
+        }).
+        directive(ngAttributeAliasDirectives).
+        directive(ngEventDirectives);
+      $provide.provider({
+        $anchorScroll: $AnchorScrollProvider,
+        $animate: $AnimateProvider,
+        $animateCss: $CoreAnimateCssProvider,
+        $$animateJs: $$CoreAnimateJsProvider,
+        $$animateQueue: $$CoreAnimateQueueProvider,
+        $$AnimateRunner: $$AnimateRunnerFactoryProvider,
+        $$animateAsyncRun: $$AnimateAsyncRunFactoryProvider,
+        $browser: $BrowserProvider,
+        $cacheFactory: $CacheFactoryProvider,
+        $controller: $ControllerProvider,
+        $document: $DocumentProvider,
+        $exceptionHandler: $ExceptionHandlerProvider,
+        $filter: $FilterProvider,
+        $$forceReflow: $$ForceReflowProvider,
+        $interpolate: $InterpolateProvider,
+        $interval: $IntervalProvider,
+        $http: $HttpProvider,
+        $httpParamSerializer: $HttpParamSerializerProvider,
+        $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider,
+        $httpBackend: $HttpBackendProvider,
+        $xhrFactory: $xhrFactoryProvider,
+        $location: $LocationProvider,
+        $log: $LogProvider,
+        $parse: $ParseProvider,
+        $rootScope: $RootScopeProvider,
+        $q: $QProvider,
+        $$q: $$QProvider,
+        $sce: $SceProvider,
+        $sceDelegate: $SceDelegateProvider,
+        $sniffer: $SnifferProvider,
+        $templateCache: $TemplateCacheProvider,
+        $templateRequest: $TemplateRequestProvider,
+        $$testability: $$TestabilityProvider,
+        $timeout: $TimeoutProvider,
+        $window: $WindowProvider,
+        $$rAF: $$RAFProvider,
+        $$jqLite: $$jqLiteProvider,
+        $$HashMap: $$HashMapProvider,
+        $$cookieReader: $$CookieReaderProvider
+      });
+    }
+  ]);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* global JQLitePrototype: true,
+  addEventListenerFn: true,
+  removeEventListenerFn: true,
+  BOOLEAN_ATTR: true,
+  ALIASED_ATTR: true,
+*/
+
+//////////////////////////////////
+//JQLite
+//////////////////////////////////
+
+/**
+ * @ngdoc function
+ * @name angular.element
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
+ *
+ * If jQuery is available, `angular.element` is an alias for the
+ * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
+ * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or **jqLite**.
+ *
+ * jqLite is a tiny, API-compatible subset of jQuery that allows
+ * Angular to manipulate the DOM in a cross-browser compatible way. jqLite implements only the most
+ * commonly needed functionality with the goal of having a very small footprint.
+ *
+ * To use `jQuery`, simply ensure it is loaded before the `angular.js` file. You can also use the
+ * {@link ngJq `ngJq`} directive to specify that jqlite should be used over jQuery, or to use a
+ * specific version of jQuery if multiple versions exist on the page.
+ *
+ * <div class="alert alert-info">**Note:** All element references in Angular are always wrapped with jQuery or
+ * jqLite (such as the element argument in a directive's compile / link function). They are never raw DOM references.</div>
+ *
+ * <div class="alert alert-warning">**Note:** Keep in mind that this function will not find elements
+ * by tag name / CSS selector. For lookups by tag name, try instead `angular.element(document).find(...)`
+ * or `$document.find()`, or use the standard DOM APIs, e.g. `document.querySelectorAll()`.</div>
+ *
+ * ## Angular's jqLite
+ * jqLite provides only the following jQuery methods:
+ *
+ * - [`addClass()`](http://api.jquery.com/addClass/)
+ * - [`after()`](http://api.jquery.com/after/)
+ * - [`append()`](http://api.jquery.com/append/)
+ * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
+ * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
+ * - [`clone()`](http://api.jquery.com/clone/)
+ * - [`contents()`](http://api.jquery.com/contents/)
+ * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`.
+ *   As a setter, does not convert numbers to strings or append 'px', and also does not have automatic property prefixing.
+ * - [`data()`](http://api.jquery.com/data/)
+ * - [`detach()`](http://api.jquery.com/detach/)
+ * - [`empty()`](http://api.jquery.com/empty/)
+ * - [`eq()`](http://api.jquery.com/eq/)
+ * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
+ * - [`hasClass()`](http://api.jquery.com/hasClass/)
+ * - [`html()`](http://api.jquery.com/html/)
+ * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
+ * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
+ * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter
+ * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
+ * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
+ * - [`prepend()`](http://api.jquery.com/prepend/)
+ * - [`prop()`](http://api.jquery.com/prop/)
+ * - [`ready()`](http://api.jquery.com/ready/)
+ * - [`remove()`](http://api.jquery.com/remove/)
+ * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
+ * - [`removeClass()`](http://api.jquery.com/removeClass/)
+ * - [`removeData()`](http://api.jquery.com/removeData/)
+ * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
+ * - [`text()`](http://api.jquery.com/text/)
+ * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
+ * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces or event object as parameter
+ * - [`val()`](http://api.jquery.com/val/)
+ * - [`wrap()`](http://api.jquery.com/wrap/)
+ *
+ * ## jQuery/jqLite Extras
+ * Angular also provides the following additional methods and events to both jQuery and jqLite:
+ *
+ * ### Events
+ * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
+ *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM
+ *    element before it is removed.
+ *
+ * ### Methods
+ * - `controller(name)` - retrieves the controller of the current element or its parent. By default
+ *   retrieves controller associated with the `ngController` directive. If `name` is provided as
+ *   camelCase directive name, then the controller for this directive will be retrieved (e.g.
+ *   `'ngModel'`).
+ * - `injector()` - retrieves the injector of the current element or its parent.
+ * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
+ *   element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
+ *   be enabled.
+ * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
+ *   current element. This getter should be used only on elements that contain a directive which starts a new isolate
+ *   scope. Calling `scope()` on this element always returns the original non-isolate scope.
+ *   Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
+ * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
+ *   parent element is reached.
+ *
+ * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
+ * @returns {Object} jQuery object.
+ */
+
+JQLite.expando = 'ng339';
+
+var jqCache = JQLite.cache = {},
+    jqId = 1,
+    addEventListenerFn = function(element, type, fn) {
+      element.addEventListener(type, fn, false);
+    },
+    removeEventListenerFn = function(element, type, fn) {
+      element.removeEventListener(type, fn, false);
+    };
+
+/*
+ * !!! This is an undocumented "private" function !!!
+ */
+JQLite._data = function(node) {
+  //jQuery always returns an object on cache miss
+  return this.cache[node[this.expando]] || {};
+};
+
+function jqNextId() { return ++jqId; }
+
+
+var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+var MOZ_HACK_REGEXP = /^moz([A-Z])/;
+var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
+var jqLiteMinErr = minErr('jqLite');
+
+/**
+ * Converts snake_case to camelCase.
+ * Also there is special case for Moz prefix starting with upper case letter.
+ * @param name Name to normalize
+ */
+function camelCase(name) {
+  return name.
+    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+      return offset ? letter.toUpperCase() : let

<TRUNCATED>

[05/51] [abbrv] [partial] struts-archetypes git commit: WW-4316 Moves Struts archetypes into its own repo

Posted by lu...@apache.org.
http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th.js
new file mode 100644
index 0000000..4a8ebc3
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_th.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07",
+      "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"
+    ],
+    "DAY": [
+      "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c",
+      "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c",
+      "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23",
+      "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18",
+      "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35",
+      "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c",
+      "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"
+    ],
+    "ERANAMES": [
+      "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a",
+      "\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a"
+    ],
+    "ERAS": [
+      "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19 \u0e04.\u0e28.",
+      "\u0e04.\u0e28."
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
+      "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
+      "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21",
+      "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
+      "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
+      "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19",
+      "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21",
+      "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21",
+      "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19",
+      "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21",
+      "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19",
+      "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"
+    ],
+    "SHORTDAY": [
+      "\u0e2d\u0e32.",
+      "\u0e08.",
+      "\u0e2d.",
+      "\u0e1e.",
+      "\u0e1e\u0e24.",
+      "\u0e28.",
+      "\u0e2a."
+    ],
+    "SHORTMONTH": [
+      "\u0e21.\u0e04.",
+      "\u0e01.\u0e1e.",
+      "\u0e21\u0e35.\u0e04.",
+      "\u0e40\u0e21.\u0e22.",
+      "\u0e1e.\u0e04.",
+      "\u0e21\u0e34.\u0e22.",
+      "\u0e01.\u0e04.",
+      "\u0e2a.\u0e04.",
+      "\u0e01.\u0e22.",
+      "\u0e15.\u0e04.",
+      "\u0e1e.\u0e22.",
+      "\u0e18.\u0e04."
+    ],
+    "STANDALONEMONTH": [
+      "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
+      "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
+      "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21",
+      "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
+      "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
+      "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19",
+      "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21",
+      "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21",
+      "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19",
+      "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21",
+      "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19",
+      "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y",
+    "longDate": "d MMMM G y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/yy HH:mm",
+    "shortDate": "d/M/yy",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u0e3f",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "th",
+  "localeID": "th",
+  "pluralCat": function(n, opt_precision) {  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-er.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-er.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-er.js
new file mode 100644
index 0000000..dcc74c8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-er.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1295\u1309\u1206 \u1230\u12d3\u1270",
+      "\u12f5\u1215\u122d \u1230\u12d3\u1275"
+    ],
+    "DAY": [
+      "\u1230\u1295\u1260\u1275",
+      "\u1230\u1291\u12ed",
+      "\u1230\u1209\u1235",
+      "\u1228\u1261\u12d5",
+      "\u1213\u1219\u1235",
+      "\u12d3\u122d\u1262",
+      "\u1240\u12f3\u121d"
+    ],
+    "ERANAMES": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "ERAS": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u1325\u122a",
+      "\u1208\u12ab\u1272\u1275",
+      "\u1218\u130b\u1262\u1275",
+      "\u121a\u12eb\u12dd\u12eb",
+      "\u130d\u1295\u1266\u1275",
+      "\u1230\u1290",
+      "\u1213\u121d\u1208",
+      "\u1290\u1213\u1230",
+      "\u1218\u1235\u12a8\u1228\u121d",
+      "\u1325\u1245\u121d\u1272",
+      "\u1215\u12f3\u122d",
+      "\u1273\u1215\u1233\u1235"
+    ],
+    "SHORTDAY": [
+      "\u1230\u1295\u1260\u1275",
+      "\u1230\u1291\u12ed",
+      "\u1230\u1209\u1235",
+      "\u1228\u1261\u12d5",
+      "\u1213\u1219\u1235",
+      "\u12d3\u122d\u1262",
+      "\u1240\u12f3\u121d"
+    ],
+    "SHORTMONTH": [
+      "\u1325\u122a",
+      "\u1208\u12ab\u1272",
+      "\u1218\u130b\u1262",
+      "\u121a\u12eb\u12dd",
+      "\u130d\u1295\u1266",
+      "\u1230\u1290",
+      "\u1213\u121d\u1208",
+      "\u1290\u1213\u1230",
+      "\u1218\u1235\u12a8",
+      "\u1325\u1245\u121d",
+      "\u1215\u12f3\u122d",
+      "\u1273\u1215\u1233"
+    ],
+    "STANDALONEMONTH": [
+      "\u1325\u122a",
+      "\u1208\u12ab\u1272\u1275",
+      "\u1218\u130b\u1262\u1275",
+      "\u121a\u12eb\u12dd\u12eb",
+      "\u130d\u1295\u1266\u1275",
+      "\u1230\u1290",
+      "\u1213\u121d\u1208",
+      "\u1290\u1213\u1230",
+      "\u1218\u1235\u12a8\u1228\u121d",
+      "\u1325\u1245\u121d\u1272",
+      "\u1215\u12f3\u122d",
+      "\u1273\u1215\u1233\u1235"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u1361 dd MMMM \u1218\u12d3\u120d\u1272 y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ti-er",
+  "localeID": "ti_ER",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-et.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-et.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-et.js
new file mode 100644
index 0000000..15b6d1a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti-et.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1295\u1309\u1206 \u1230\u12d3\u1270",
+      "\u12f5\u1215\u122d \u1230\u12d3\u1275"
+    ],
+    "DAY": [
+      "\u1230\u1295\u1260\u1275",
+      "\u1230\u1291\u12ed",
+      "\u1220\u1209\u1235",
+      "\u1228\u1261\u12d5",
+      "\u1283\u1219\u1235",
+      "\u12d3\u122d\u1262",
+      "\u1240\u12f3\u121d"
+    ],
+    "ERANAMES": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "ERAS": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u1230\u1295\u1260\u1275",
+      "\u1230\u1291\u12ed",
+      "\u1220\u1209\u1235",
+      "\u1228\u1261\u12d5",
+      "\u1283\u1219\u1235",
+      "\u12d3\u122d\u1262",
+      "\u1240\u12f3\u121d"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1270",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "STANDALONEMONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u1363 dd MMMM \u1218\u12d3\u120d\u1272 y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ti-et",
+  "localeID": "ti_ET",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti.js
new file mode 100644
index 0000000..199b101
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ti.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1295\u1309\u1206 \u1230\u12d3\u1270",
+      "\u12f5\u1215\u122d \u1230\u12d3\u1275"
+    ],
+    "DAY": [
+      "\u1230\u1295\u1260\u1275",
+      "\u1230\u1291\u12ed",
+      "\u1220\u1209\u1235",
+      "\u1228\u1261\u12d5",
+      "\u1283\u1219\u1235",
+      "\u12d3\u122d\u1262",
+      "\u1240\u12f3\u121d"
+    ],
+    "ERANAMES": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "ERAS": [
+      "\u12d3/\u12d3",
+      "\u12d3/\u121d"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u1230\u1295\u1260\u1275",
+      "\u1230\u1291\u12ed",
+      "\u1220\u1209\u1235",
+      "\u1228\u1261\u12d5",
+      "\u1283\u1219\u1235",
+      "\u12d3\u122d\u1262",
+      "\u1240\u12f3\u121d"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1270",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "STANDALONEMONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u1363 dd MMMM \u1218\u12d3\u120d\u1272 y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Birr",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ti",
+  "localeID": "ti",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig-er.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig-er.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig-er.js
new file mode 100644
index 0000000..0f137e0
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig-er.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1240\u12f0\u121d \u1230\u122d\u121d\u12d5\u120d",
+      "\u1213\u1246 \u1235\u122d\u121d\u12d5\u120d"
+    ],
+    "DAY": [
+      "\u1230\u1295\u1260\u1275 \u12d3\u1263\u12ed",
+      "\u1230\u1296",
+      "\u1273\u120b\u1238\u1296",
+      "\u12a3\u1228\u122d\u1263\u12d3",
+      "\u12a8\u121a\u123d",
+      "\u1305\u121d\u12d3\u1275",
+      "\u1230\u1295\u1260\u1275 \u1295\u12a2\u123d"
+    ],
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u1230/\u12d3",
+      "\u1230\u1296",
+      "\u1273\u120b\u1238",
+      "\u12a3\u1228\u122d",
+      "\u12a8\u121a\u123d",
+      "\u1305\u121d\u12d3",
+      "\u1230/\u1295"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1270",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "fullDate": "EEEE\u1361 dd MMMM \u12ee\u121d y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tig-er",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig.js
new file mode 100644
index 0000000..493fd39
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tig.js
@@ -0,0 +1,115 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u1240\u12f0\u121d \u1230\u122d\u121d\u12d5\u120d",
+      "\u1213\u1246 \u1235\u122d\u121d\u12d5\u120d"
+    ],
+    "DAY": [
+      "\u1230\u1295\u1260\u1275 \u12d3\u1263\u12ed",
+      "\u1230\u1296",
+      "\u1273\u120b\u1238\u1296",
+      "\u12a3\u1228\u122d\u1263\u12d3",
+      "\u12a8\u121a\u123d",
+      "\u1305\u121d\u12d3\u1275",
+      "\u1230\u1295\u1260\u1275 \u1295\u12a2\u123d"
+    ],
+    "MONTH": [
+      "\u1303\u1295\u12e9\u12c8\u122a",
+      "\u134c\u1265\u1229\u12c8\u122a",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228\u120d",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235\u1275",
+      "\u1234\u1355\u1274\u121d\u1260\u122d",
+      "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+      "\u1296\u126c\u121d\u1260\u122d",
+      "\u12f2\u1234\u121d\u1260\u122d"
+    ],
+    "SHORTDAY": [
+      "\u1230/\u12d3",
+      "\u1230\u1296",
+      "\u1273\u120b\u1238",
+      "\u12a3\u1228\u122d",
+      "\u12a8\u121a\u123d",
+      "\u1305\u121d\u12d3",
+      "\u1230/\u1295"
+    ],
+    "SHORTMONTH": [
+      "\u1303\u1295\u12e9",
+      "\u134c\u1265\u1229",
+      "\u121b\u122d\u127d",
+      "\u12a4\u1355\u1228",
+      "\u121c\u12ed",
+      "\u1301\u1295",
+      "\u1301\u120b\u12ed",
+      "\u12a6\u1308\u1235",
+      "\u1234\u1355\u1274",
+      "\u12a6\u12ad\u1270",
+      "\u1296\u126c\u121d",
+      "\u12f2\u1234\u121d"
+    ],
+    "fullDate": "EEEE\u1361 dd MMMM \u12ee\u121d y G",
+    "longDate": "dd MMMM y",
+    "medium": "dd-MMM-y h:mm:ss a",
+    "mediumDate": "dd-MMM-y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/yy h:mm a",
+    "shortDate": "dd/MM/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "Nfk",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tig",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tl.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tl.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tl.js
new file mode 100644
index 0000000..ba7e457
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tl.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Linggo",
+      "Lunes",
+      "Martes",
+      "Miyerkules",
+      "Huwebes",
+      "Biyernes",
+      "Sabado"
+    ],
+    "ERANAMES": [
+      "BC",
+      "AD"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Enero",
+      "Pebrero",
+      "Marso",
+      "Abril",
+      "Mayo",
+      "Hunyo",
+      "Hulyo",
+      "Agosto",
+      "Setyembre",
+      "Oktubre",
+      "Nobyembre",
+      "Disyembre"
+    ],
+    "SHORTDAY": [
+      "Lin",
+      "Lun",
+      "Mar",
+      "Miy",
+      "Huw",
+      "Biy",
+      "Sab"
+    ],
+    "SHORTMONTH": [
+      "Ene",
+      "Peb",
+      "Mar",
+      "Abr",
+      "May",
+      "Hun",
+      "Hul",
+      "Ago",
+      "Set",
+      "Okt",
+      "Nob",
+      "Dis"
+    ],
+    "STANDALONEMONTH": [
+      "Enero",
+      "Pebrero",
+      "Marso",
+      "Abril",
+      "Mayo",
+      "Hunyo",
+      "Hulyo",
+      "Agosto",
+      "Setyembre",
+      "Oktubre",
+      "Nobyembre",
+      "Disyembre"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20b1",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tl",
+  "localeID": "tl",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (vf.v == 0 && (i == 1 || i == 2 || i == 3) || vf.v == 0 && i % 10 != 4 && i % 10 != 6 && i % 10 != 9 || vf.v != 0 && vf.f % 10 != 4 && vf.f % 10 != 6 && vf.f % 10 != 9) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-bw.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-bw.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-bw.js
new file mode 100644
index 0000000..bc05b8e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-bw.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Tshipi",
+      "Mosopulogo",
+      "Labobedi",
+      "Laboraro",
+      "Labone",
+      "Labotlhano",
+      "Matlhatso"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ferikgong",
+      "Tlhakole",
+      "Mopitlo",
+      "Moranang",
+      "Motsheganang",
+      "Seetebosigo",
+      "Phukwi",
+      "Phatwe",
+      "Lwetse",
+      "Diphalane",
+      "Ngwanatsele",
+      "Sedimonthole"
+    ],
+    "SHORTDAY": [
+      "Tsh",
+      "Mos",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Tla",
+      "Mat"
+    ],
+    "SHORTMONTH": [
+      "Fer",
+      "Tlh",
+      "Mop",
+      "Mor",
+      "Mot",
+      "See",
+      "Phu",
+      "Pha",
+      "Lwe",
+      "Dip",
+      "Ngw",
+      "Sed"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "P",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tn-bw",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-za.js
new file mode 100644
index 0000000..cecb7ee
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn-za.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Tshipi",
+      "Mosopulogo",
+      "Labobedi",
+      "Laboraro",
+      "Labone",
+      "Labotlhano",
+      "Matlhatso"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ferikgong",
+      "Tlhakole",
+      "Mopitlo",
+      "Moranang",
+      "Motsheganang",
+      "Seetebosigo",
+      "Phukwi",
+      "Phatwe",
+      "Lwetse",
+      "Diphalane",
+      "Ngwanatsele",
+      "Sedimonthole"
+    ],
+    "SHORTDAY": [
+      "Tsh",
+      "Mos",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Tla",
+      "Mat"
+    ],
+    "SHORTMONTH": [
+      "Fer",
+      "Tlh",
+      "Mop",
+      "Mor",
+      "Mot",
+      "See",
+      "Phu",
+      "Pha",
+      "Lwe",
+      "Dip",
+      "Ngw",
+      "Sed"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tn-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn.js
new file mode 100644
index 0000000..f249556
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tn.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Tshipi",
+      "Mosopulogo",
+      "Labobedi",
+      "Laboraro",
+      "Labone",
+      "Labotlhano",
+      "Matlhatso"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Ferikgong",
+      "Tlhakole",
+      "Mopitlo",
+      "Moranang",
+      "Motsheganang",
+      "Seetebosigo",
+      "Phukwi",
+      "Phatwe",
+      "Lwetse",
+      "Diphalane",
+      "Ngwanatsele",
+      "Sedimonthole"
+    ],
+    "SHORTDAY": [
+      "Tsh",
+      "Mos",
+      "Bed",
+      "Rar",
+      "Ne",
+      "Tla",
+      "Mat"
+    ],
+    "SHORTMONTH": [
+      "Fer",
+      "Tlh",
+      "Mop",
+      "Mor",
+      "Mot",
+      "See",
+      "Phu",
+      "Pha",
+      "Lwe",
+      "Dip",
+      "Ngw",
+      "Sed"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "tn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to-to.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to-to.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to-to.js
new file mode 100644
index 0000000..65f6a5b
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to-to.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "S\u0101pate",
+      "M\u014dnite",
+      "T\u016bsite",
+      "Pulelulu",
+      "Tu\u02bbapulelulu",
+      "Falaite",
+      "Tokonaki"
+    ],
+    "ERANAMES": [
+      "ki mu\u02bba",
+      "ta\u02bbu \u02bbo S\u012bs\u016b"
+    ],
+    "ERAS": [
+      "KM",
+      "TS"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "S\u0101nuali",
+      "F\u0113pueli",
+      "Ma\u02bbasi",
+      "\u02bbEpeleli",
+      "M\u0113",
+      "Sune",
+      "Siulai",
+      "\u02bbAokosi",
+      "Sepitema",
+      "\u02bbOkatopa",
+      "N\u014dvema",
+      "T\u012bsema"
+    ],
+    "SHORTDAY": [
+      "S\u0101p",
+      "M\u014dn",
+      "T\u016bs",
+      "Pul",
+      "Tu\u02bba",
+      "Fal",
+      "Tok"
+    ],
+    "SHORTMONTH": [
+      "S\u0101n",
+      "F\u0113p",
+      "Ma\u02bba",
+      "\u02bbEpe",
+      "M\u0113",
+      "Sun",
+      "Siu",
+      "\u02bbAok",
+      "Sep",
+      "\u02bbOka",
+      "N\u014dv",
+      "T\u012bs"
+    ],
+    "STANDALONEMONTH": [
+      "S\u0101nuali",
+      "F\u0113pueli",
+      "Ma\u02bbasi",
+      "\u02bbEpeleli",
+      "M\u0113",
+      "Sune",
+      "Siulai",
+      "\u02bbAokosi",
+      "Sepitema",
+      "\u02bbOkatopa",
+      "N\u014dvema",
+      "T\u012bsema"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "T$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "to-to",
+  "localeID": "to_TO",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to.js
new file mode 100644
index 0000000..cadf60a
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_to.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "S\u0101pate",
+      "M\u014dnite",
+      "T\u016bsite",
+      "Pulelulu",
+      "Tu\u02bbapulelulu",
+      "Falaite",
+      "Tokonaki"
+    ],
+    "ERANAMES": [
+      "ki mu\u02bba",
+      "ta\u02bbu \u02bbo S\u012bs\u016b"
+    ],
+    "ERAS": [
+      "KM",
+      "TS"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "S\u0101nuali",
+      "F\u0113pueli",
+      "Ma\u02bbasi",
+      "\u02bbEpeleli",
+      "M\u0113",
+      "Sune",
+      "Siulai",
+      "\u02bbAokosi",
+      "Sepitema",
+      "\u02bbOkatopa",
+      "N\u014dvema",
+      "T\u012bsema"
+    ],
+    "SHORTDAY": [
+      "S\u0101p",
+      "M\u014dn",
+      "T\u016bs",
+      "Pul",
+      "Tu\u02bba",
+      "Fal",
+      "Tok"
+    ],
+    "SHORTMONTH": [
+      "S\u0101n",
+      "F\u0113p",
+      "Ma\u02bba",
+      "\u02bbEpe",
+      "M\u0113",
+      "Sun",
+      "Siu",
+      "\u02bbAok",
+      "Sep",
+      "\u02bbOka",
+      "N\u014dv",
+      "T\u012bs"
+    ],
+    "STANDALONEMONTH": [
+      "S\u0101nuali",
+      "F\u0113pueli",
+      "Ma\u02bbasi",
+      "\u02bbEpeleli",
+      "M\u0113",
+      "Sune",
+      "Siulai",
+      "\u02bbAokosi",
+      "Sepitema",
+      "\u02bbOkatopa",
+      "N\u014dvema",
+      "T\u012bsema"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "d/M/yy h:mm a",
+    "shortDate": "d/M/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "T$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4\u00a0",
+        "negSuf": "",
+        "posPre": "\u00a4\u00a0",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "to",
+  "localeID": "to",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-cy.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-cy.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-cy.js
new file mode 100644
index 0000000..f1ec26e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-cy.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u00d6\u00d6",
+      "\u00d6S"
+    ],
+    "DAY": [
+      "Pazar",
+      "Pazartesi",
+      "Sal\u0131",
+      "\u00c7ar\u015famba",
+      "Per\u015fembe",
+      "Cuma",
+      "Cumartesi"
+    ],
+    "ERANAMES": [
+      "Milattan \u00d6nce",
+      "Milattan Sonra"
+    ],
+    "ERAS": [
+      "M\u00d6",
+      "MS"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ocak",
+      "\u015eubat",
+      "Mart",
+      "Nisan",
+      "May\u0131s",
+      "Haziran",
+      "Temmuz",
+      "A\u011fustos",
+      "Eyl\u00fcl",
+      "Ekim",
+      "Kas\u0131m",
+      "Aral\u0131k"
+    ],
+    "SHORTDAY": [
+      "Paz",
+      "Pzt",
+      "Sal",
+      "\u00c7ar",
+      "Per",
+      "Cum",
+      "Cmt"
+    ],
+    "SHORTMONTH": [
+      "Oca",
+      "\u015eub",
+      "Mar",
+      "Nis",
+      "May",
+      "Haz",
+      "Tem",
+      "A\u011fu",
+      "Eyl",
+      "Eki",
+      "Kas",
+      "Ara"
+    ],
+    "STANDALONEMONTH": [
+      "Ocak",
+      "\u015eubat",
+      "Mart",
+      "Nisan",
+      "May\u0131s",
+      "Haziran",
+      "Temmuz",
+      "A\u011fustos",
+      "Eyl\u00fcl",
+      "Ekim",
+      "Kas\u0131m",
+      "Aral\u0131k"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "d MMMM y EEEE",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d MM y HH:mm",
+    "shortDate": "d MM y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u20ac",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "tr-cy",
+  "localeID": "tr_CY",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-tr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-tr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-tr.js
new file mode 100644
index 0000000..4758a78
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr-tr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u00d6\u00d6",
+      "\u00d6S"
+    ],
+    "DAY": [
+      "Pazar",
+      "Pazartesi",
+      "Sal\u0131",
+      "\u00c7ar\u015famba",
+      "Per\u015fembe",
+      "Cuma",
+      "Cumartesi"
+    ],
+    "ERANAMES": [
+      "Milattan \u00d6nce",
+      "Milattan Sonra"
+    ],
+    "ERAS": [
+      "M\u00d6",
+      "MS"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ocak",
+      "\u015eubat",
+      "Mart",
+      "Nisan",
+      "May\u0131s",
+      "Haziran",
+      "Temmuz",
+      "A\u011fustos",
+      "Eyl\u00fcl",
+      "Ekim",
+      "Kas\u0131m",
+      "Aral\u0131k"
+    ],
+    "SHORTDAY": [
+      "Paz",
+      "Pzt",
+      "Sal",
+      "\u00c7ar",
+      "Per",
+      "Cum",
+      "Cmt"
+    ],
+    "SHORTMONTH": [
+      "Oca",
+      "\u015eub",
+      "Mar",
+      "Nis",
+      "May",
+      "Haz",
+      "Tem",
+      "A\u011fu",
+      "Eyl",
+      "Eki",
+      "Kas",
+      "Ara"
+    ],
+    "STANDALONEMONTH": [
+      "Ocak",
+      "\u015eubat",
+      "Mart",
+      "Nisan",
+      "May\u0131s",
+      "Haziran",
+      "Temmuz",
+      "A\u011fustos",
+      "Eyl\u00fcl",
+      "Ekim",
+      "Kas\u0131m",
+      "Aral\u0131k"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "d MMMM y EEEE",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d MM y HH:mm",
+    "shortDate": "d MM y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "tr-tr",
+  "localeID": "tr_TR",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr.js
new file mode 100644
index 0000000..0de8ed8
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tr.js
@@ -0,0 +1,125 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u00d6\u00d6",
+      "\u00d6S"
+    ],
+    "DAY": [
+      "Pazar",
+      "Pazartesi",
+      "Sal\u0131",
+      "\u00c7ar\u015famba",
+      "Per\u015fembe",
+      "Cuma",
+      "Cumartesi"
+    ],
+    "ERANAMES": [
+      "Milattan \u00d6nce",
+      "Milattan Sonra"
+    ],
+    "ERAS": [
+      "M\u00d6",
+      "MS"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "Ocak",
+      "\u015eubat",
+      "Mart",
+      "Nisan",
+      "May\u0131s",
+      "Haziran",
+      "Temmuz",
+      "A\u011fustos",
+      "Eyl\u00fcl",
+      "Ekim",
+      "Kas\u0131m",
+      "Aral\u0131k"
+    ],
+    "SHORTDAY": [
+      "Paz",
+      "Pzt",
+      "Sal",
+      "\u00c7ar",
+      "Per",
+      "Cum",
+      "Cmt"
+    ],
+    "SHORTMONTH": [
+      "Oca",
+      "\u015eub",
+      "Mar",
+      "Nis",
+      "May",
+      "Haz",
+      "Tem",
+      "A\u011fu",
+      "Eyl",
+      "Eki",
+      "Kas",
+      "Ara"
+    ],
+    "STANDALONEMONTH": [
+      "Ocak",
+      "\u015eubat",
+      "Mart",
+      "Nisan",
+      "May\u0131s",
+      "Haziran",
+      "Temmuz",
+      "A\u011fustos",
+      "Eyl\u00fcl",
+      "Ekim",
+      "Kas\u0131m",
+      "Aral\u0131k"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "d MMMM y EEEE",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d MM y HH:mm",
+    "shortDate": "d MM y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "TL",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": ".",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "tr",
+  "localeID": "tr",
+  "pluralCat": function(n, opt_precision) {  if (n == 1) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts-za.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts-za.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts-za.js
new file mode 100644
index 0000000..077c4a5
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts-za.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sonto",
+      "Musumbhunuku",
+      "Ravumbirhi",
+      "Ravunharhu",
+      "Ravumune",
+      "Ravuntlhanu",
+      "Mugqivela"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Sunguti",
+      "Nyenyenyani",
+      "Nyenyankulu",
+      "Dzivamisoko",
+      "Mudyaxihi",
+      "Khotavuxika",
+      "Mawuwani",
+      "Mhawuri",
+      "Ndzhati",
+      "Nhlangula",
+      "Hukuri",
+      "N\u2019wendzamhala"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mus",
+      "Bir",
+      "Har",
+      "Ne",
+      "Tlh",
+      "Mug"
+    ],
+    "SHORTMONTH": [
+      "Sun",
+      "Yan",
+      "Kul",
+      "Dzi",
+      "Mud",
+      "Kho",
+      "Maw",
+      "Mha",
+      "Ndz",
+      "Nhl",
+      "Huk",
+      "N\u2019w"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ts-za",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts.js
new file mode 100644
index 0000000..e529908
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ts.js
@@ -0,0 +1,128 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sonto",
+      "Musumbhunuku",
+      "Ravumbirhi",
+      "Ravunharhu",
+      "Ravumune",
+      "Ravuntlhanu",
+      "Mugqivela"
+    ],
+    "ERANAMES": [
+      "BCE",
+      "CE"
+    ],
+    "ERAS": [
+      "BCE",
+      "CE"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "Sunguti",
+      "Nyenyenyani",
+      "Nyenyankulu",
+      "Dzivamisoko",
+      "Mudyaxihi",
+      "Khotavuxika",
+      "Mawuwani",
+      "Mhawuri",
+      "Ndzhati",
+      "Nhlangula",
+      "Hukuri",
+      "N\u2019wendzamhala"
+    ],
+    "SHORTDAY": [
+      "Son",
+      "Mus",
+      "Bir",
+      "Har",
+      "Ne",
+      "Tlh",
+      "Mug"
+    ],
+    "SHORTMONTH": [
+      "Sun",
+      "Yan",
+      "Kul",
+      "Dzi",
+      "Mud",
+      "Kho",
+      "Maw",
+      "Mha",
+      "Ndz",
+      "Nhl",
+      "Huk",
+      "N\u2019w"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "y MMMM d, EEEE",
+    "longDate": "y MMMM d",
+    "medium": "y MMM d HH:mm:ss",
+    "mediumDate": "y MMM d",
+    "mediumTime": "HH:mm:ss",
+    "short": "y-MM-dd HH:mm",
+    "shortDate": "y-MM-dd",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "R",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "\u00a4-",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ts",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq-ne.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq-ne.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq-ne.js
new file mode 100644
index 0000000..77c78dc
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq-ne.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Subbaahi",
+      "Zaarikay b"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atinni",
+      "Atalaata",
+      "Alarba",
+      "Alhamiisa",
+      "Alzuma",
+      "Asibti"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa zamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alz",
+      "Asi"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "twq-ne",
+  "localeID": "twq_NE",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq.js
new file mode 100644
index 0000000..8fb664e
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_twq.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Subbaahi",
+      "Zaarikay b"
+    ],
+    "DAY": [
+      "Alhadi",
+      "Atinni",
+      "Atalaata",
+      "Alarba",
+      "Alhamiisa",
+      "Alzuma",
+      "Asibti"
+    ],
+    "ERANAMES": [
+      "Isaa jine",
+      "Isaa zamanoo"
+    ],
+    "ERAS": [
+      "IJ",
+      "IZ"
+    ],
+    "FIRSTDAYOFWEEK": 0,
+    "MONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "SHORTDAY": [
+      "Alh",
+      "Ati",
+      "Ata",
+      "Ala",
+      "Alm",
+      "Alz",
+      "Asi"
+    ],
+    "SHORTMONTH": [
+      "\u017dan",
+      "Fee",
+      "Mar",
+      "Awi",
+      "Me",
+      "\u017duw",
+      "\u017duy",
+      "Ut",
+      "Sek",
+      "Okt",
+      "Noo",
+      "Dee"
+    ],
+    "STANDALONEMONTH": [
+      "\u017danwiye",
+      "Feewiriye",
+      "Marsi",
+      "Awiril",
+      "Me",
+      "\u017duwe\u014b",
+      "\u017duyye",
+      "Ut",
+      "Sektanbur",
+      "Oktoobur",
+      "Noowanbur",
+      "Deesanbur"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y HH:mm:ss",
+    "mediumDate": "d MMM y",
+    "mediumTime": "HH:mm:ss",
+    "short": "d/M/y HH:mm",
+    "shortDate": "d/M/y",
+    "shortTime": "HH:mm"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "CFA",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a4"
+      }
+    ]
+  },
+  "id": "twq",
+  "localeID": "twq",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn-ma.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn-ma.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn-ma.js
new file mode 100644
index 0000000..4972219
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn-ma.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Zdat azal",
+      "\u1e0ceffir aza"
+    ],
+    "DAY": [
+      "Asamas",
+      "Aynas",
+      "Asinas",
+      "Akras",
+      "Akwas",
+      "Asimwas",
+      "Asi\u1e0dyas"
+    ],
+    "ERANAMES": [
+      "Zdat \u0190isa (TA\u0194)",
+      "\u1e0ceffir \u0190isa (TA\u0194)"
+    ],
+    "ERAS": [
+      "Z\u0190",
+      "\u1e0c\u0190"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "Yennayer",
+      "Yebrayer",
+      "Mars",
+      "Ibrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyuz",
+      "\u0194uct",
+      "Cutanbir",
+      "K\u1e6duber",
+      "Nwanbir",
+      "Dujanbir"
+    ],
+    "SHORTDAY": [
+      "Asa",
+      "Ayn",
+      "Asn",
+      "Akr",
+      "Akw",
+      "Asm",
+      "As\u1e0d"
+    ],
+    "SHORTMONTH": [
+      "Yen",
+      "Yeb",
+      "Mar",
+      "Ibr",
+      "May",
+      "Yun",
+      "Yul",
+      "\u0194uc",
+      "Cut",
+      "K\u1e6du",
+      "Nwa",
+      "Duj"
+    ],
+    "STANDALONEMONTH": [
+      "Yennayer",
+      "Yebrayer",
+      "Mars",
+      "Ibrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyuz",
+      "\u0194uct",
+      "Cutanbir",
+      "K\u1e6duber",
+      "Nwanbir",
+      "Dujanbir"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "tzm-latn-ma",
+  "localeID": "tzm_Latn_MA",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn.js
new file mode 100644
index 0000000..2b80fb7
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm-latn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Zdat azal",
+      "\u1e0ceffir aza"
+    ],
+    "DAY": [
+      "Asamas",
+      "Aynas",
+      "Asinas",
+      "Akras",
+      "Akwas",
+      "Asimwas",
+      "Asi\u1e0dyas"
+    ],
+    "ERANAMES": [
+      "Zdat \u0190isa (TA\u0194)",
+      "\u1e0ceffir \u0190isa (TA\u0194)"
+    ],
+    "ERAS": [
+      "Z\u0190",
+      "\u1e0c\u0190"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "Yennayer",
+      "Yebrayer",
+      "Mars",
+      "Ibrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyuz",
+      "\u0194uct",
+      "Cutanbir",
+      "K\u1e6duber",
+      "Nwanbir",
+      "Dujanbir"
+    ],
+    "SHORTDAY": [
+      "Asa",
+      "Ayn",
+      "Asn",
+      "Akr",
+      "Akw",
+      "Asm",
+      "As\u1e0d"
+    ],
+    "SHORTMONTH": [
+      "Yen",
+      "Yeb",
+      "Mar",
+      "Ibr",
+      "May",
+      "Yun",
+      "Yul",
+      "\u0194uc",
+      "Cut",
+      "K\u1e6du",
+      "Nwa",
+      "Duj"
+    ],
+    "STANDALONEMONTH": [
+      "Yennayer",
+      "Yebrayer",
+      "Mars",
+      "Ibrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyuz",
+      "\u0194uct",
+      "Cutanbir",
+      "K\u1e6duber",
+      "Nwanbir",
+      "Dujanbir"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "tzm-latn",
+  "localeID": "tzm_Latn",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm.js
new file mode 100644
index 0000000..b51f0f9
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_tzm.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "Zdat azal",
+      "\u1e0ceffir aza"
+    ],
+    "DAY": [
+      "Asamas",
+      "Aynas",
+      "Asinas",
+      "Akras",
+      "Akwas",
+      "Asimwas",
+      "Asi\u1e0dyas"
+    ],
+    "ERANAMES": [
+      "Zdat \u0190isa (TA\u0194)",
+      "\u1e0ceffir \u0190isa (TA\u0194)"
+    ],
+    "ERAS": [
+      "Z\u0190",
+      "\u1e0c\u0190"
+    ],
+    "FIRSTDAYOFWEEK": 5,
+    "MONTH": [
+      "Yennayer",
+      "Yebrayer",
+      "Mars",
+      "Ibrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyuz",
+      "\u0194uct",
+      "Cutanbir",
+      "K\u1e6duber",
+      "Nwanbir",
+      "Dujanbir"
+    ],
+    "SHORTDAY": [
+      "Asa",
+      "Ayn",
+      "Asn",
+      "Akr",
+      "Akw",
+      "Asm",
+      "As\u1e0d"
+    ],
+    "SHORTMONTH": [
+      "Yen",
+      "Yeb",
+      "Mar",
+      "Ibr",
+      "May",
+      "Yun",
+      "Yul",
+      "\u0194uc",
+      "Cut",
+      "K\u1e6du",
+      "Nwa",
+      "Duj"
+    ],
+    "STANDALONEMONTH": [
+      "Yennayer",
+      "Yebrayer",
+      "Mars",
+      "Ibrir",
+      "Mayyu",
+      "Yunyu",
+      "Yulyuz",
+      "\u0194uct",
+      "Cutanbir",
+      "K\u1e6duber",
+      "Nwanbir",
+      "Dujanbir"
+    ],
+    "WEEKENDRANGE": [
+      4,
+      5
+    ],
+    "fullDate": "EEEE, d MMMM y",
+    "longDate": "d MMMM y",
+    "medium": "d MMM y h:mm:ss a",
+    "mediumDate": "d MMM y",
+    "mediumTime": "h:mm:ss a",
+    "short": "dd/MM/y h:mm a",
+    "shortDate": "dd/MM/y",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "dh",
+    "DECIMAL_SEP": ",",
+    "GROUP_SEP": "\u00a0",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "\u00a0\u00a4",
+        "posPre": "",
+        "posSuf": "\u00a0\u00a4"
+      }
+    ]
+  },
+  "id": "tzm",
+  "localeID": "tzm",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);

http://git-wip-us.apache.org/repos/asf/struts-archetypes/blob/3662396a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab-cn.js
----------------------------------------------------------------------
diff --git a/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab-cn.js b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab-cn.js
new file mode 100644
index 0000000..de43911
--- /dev/null
+++ b/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/i18n/angular-locale_ug-arab-cn.js
@@ -0,0 +1,143 @@
+'use strict';
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"
+    ],
+    "DAY": [
+      "\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5",
+      "\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5",
+      "\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5",
+      "\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5",
+      "\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5",
+      "\u062c\u06c8\u0645\u06d5",
+      "\u0634\u06d5\u0646\u0628\u06d5"
+    ],
+    "ERANAMES": [
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5"
+    ],
+    "ERAS": [
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5\u062f\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646",
+      "\u0645\u0649\u0644\u0627\u062f\u0649\u064a\u06d5"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0628\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "SHORTDAY": [
+      "\u064a\u06d5",
+      "\u062f\u06c8",
+      "\u0633\u06d5",
+      "\u0686\u0627",
+      "\u067e\u06d5",
+      "\u0686\u06c8",
+      "\u0634\u06d5"
+    ],
+    "SHORTMONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0646\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "STANDALONEMONTH": [
+      "\u064a\u0627\u0646\u06cb\u0627\u0631",
+      "\u0641\u06d0\u06cb\u0631\u0627\u0644",
+      "\u0645\u0627\u0631\u062a",
+      "\u0626\u0627\u067e\u0631\u06d0\u0644",
+      "\u0645\u0627\u064a",
+      "\u0626\u0649\u064a\u06c7\u0646",
+      "\u0626\u0649\u064a\u06c7\u0644",
+      "\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a",
+      "\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631",
+      "\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631",
+      "\u0628\u0648\u064a\u0627\u0628\u0649\u0631",
+      "\u062f\u06d0\u0643\u0627\u0628\u0649\u0631"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE\u060c MMMM d\u060c y",
+    "longDate": "MMMM d\u060c y",
+    "medium": "MMM d\u060c y h:mm:ss a",
+    "mediumDate": "MMM d\u060c y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "\u00a5",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "ug-arab-cn",
+  "localeID": "ug_Arab_CN",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);