{ "id": "155573", "key": "ALOY-1365", "fields": { "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false }, "project": { "id": "11113", "key": "ALOY", "name": "Alloy", "projectCategory": { "id": "10400", "description": "Tools for developing applications", "name": "Tooling" } }, "fixVersions": [ { "id": "17728", "name": "Release 5.2.1", "archived": false, "released": true, "releaseDate": "2016-03-25" }, { "id": "17974", "name": "alloy 1.8.0", "archived": false, "released": true, "releaseDate": "2016-03-16" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-03-16T21:15:28.000+0000", "created": "2016-03-09T09:18:00.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [], "versions": [], "issuelinks": [ { "id": "50990", "type": { "id": "10120", "name": "Gantt: finish-start", "inward": "has to be done after", "outward": "has to be done before" }, "outwardIssue": { "id": "155594", "key": "TIMOB-20543", "fields": { "summary": "Build flags for custom platform and i18n folders should be reverted", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "None", "id": "6" }, "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false } } } }, { "id": "51149", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "155940", "key": "ALOY-1375", "fields": { "summary": "Alloy extract-18n --apply writes to wrong strings.xml in Alloy 1.8.1", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51113", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "155864", "key": "CLI-973", "fields": { "summary": "Update Alloy version to 1.8.0", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51125", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "155898", "key": "CLI-975", "fields": { "summary": "iOS: i18n and platform folders not handled correctly by Alloy in CLI", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51097", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "155839", "key": "ALOY-1373", "fields": { "summary": "/platform and /i18n folder contents can be lost on build", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "None", "id": "6" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51206", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "159251", "key": "ALOY-1484", "fields": { "summary": "Regression: Moment.js languages for i18n folders no longer included", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "None", "id": "6" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51207", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "159253", "key": "ALOY-1485", "fields": { "summary": "Warning on relocation of platform folder confusing if it contains only one platform", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "None", "id": "6" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } }, { "id": "51366", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "159275", "key": "ALOY-1490", "fields": { "summary": "Alloy 1.8+ not copying symbolic links to the platform folder in the project root", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "54565", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "153499", "key": "ALOY-1336", "fields": { "summary": "Alloy Theme Fails to merge/overwrite the platform/iphone folder - specifically 'Settings.bundle' sub-folder", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "50983", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "155227", "key": "TIMOB-20537", "fields": { "summary": "Regression: Alloy-themed i18n and platform folders no longer work since Ti 5.2.0.GA", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51124", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "155439", "key": "ALOY-1366", "fields": { "summary": "Alloy: images from widget theme not merged with Resources", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "50984", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "152042", "key": "ALOY-1318", "fields": { "summary": "DefaultIcon(-platform).png should be theme-able", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "None", "id": "6" }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } } ], "assignee": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "updated": "2017-03-15T21:43:02.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "14203", "name": "I18N", "description": "Internationalization" } ], "description": "The recent regression reported under TIMOB-20537 and the open request to theme {{Defautlcon.png}} filed under ALOY-1318, ask for a better way in which Alloy handles {{i18n}} and {{platform}} folders.\r\n\r\nFor {{X}} read both {{i18n}} and {{platform}}:\r\n\r\n* Like {{/Resources}}, the {{/X}} folders should be generated by Alloy.\r\n* For Alloy apps, i18n and platform resources should be in the {{/app/X}} folders.\r\n* On compile, Alloy should replace the {{/X}} folders with {{/app/X}}, then override with {{app/theme/my-theme/X}} (ALOY-858) and default with {{app/widgets/my-widget/X}} (ALOY-967 + ALOY-1059).\r\n* Alloy will no longer need TIMOB-17446 since Titanium can use the default paths.\r\n\r\nWe should require an {{app/X}} folder to be present before we generate (and thus overwrite/replace}} {{/X}}. This will make sure that an existing Alloy app that only has {{/X}} and {{/app/themes/my-theme/X}} or {{/app/widgets/my-widget/X}} will not end up loosing the resources it had in {{/X}}. Of course the change will still be breaking because the resources in themes and widgets will no longer make it to the app. But the migration path is simple because the developer simply has to move the {{/X}} folders to {{/app/X}}. We could even do that for the developer, which would make it not breaking at all, although we still need to notify the developer of the change.", "attachment": [], "flagged": false, "summary": "Improve how Alloy works with i18n and platform folders", "creator": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "subtasks": [], "reporter": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "environment": null, "closedSprints": [ { "id": 596, "state": "closed", "name": "2016 Sprint 05 Tooling", "startDate": "2016-02-27T01:30:53.769Z", "endDate": "2016-03-12T01:30:00.000Z", "completeDate": "2016-03-14T11:54:10.256Z", "originBoardId": 121 }, { "id": 598, "state": "closed", "name": "2016 Sprint 06 Tooling", "startDate": "2016-03-12T01:30:46.475Z", "endDate": "2016-03-26T00:30:00.000Z", "completeDate": "2016-03-28T03:31:22.652Z", "originBoardId": 121 } ], "comment": { "comments": [ { "id": "379352", "author": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "body": "[~fokkezb] \r\n\r\n[~cbarber] and I had a long offline conversation about this back in Dec 2015. This was all discussed. You reach out to him for details or I can let you have a transcript.\r\n\r\ntiapp.xml should ALSO be pushed into\r\n\r\n* *project/app/tiapp.xml*\r\n\r\nand then if required into\r\n\r\n* *project/app/themes/red/tiapp.xml*\r\n\r\nThis fixes the last real hurdle of theming as long as all the above is also sorted. I do not care if the themed versions are overwritten or merged - the ability to theme is the key.", "updateAuthor": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "created": "2016-03-09T16:30:49.000+0000", "updated": "2016-03-09T16:30:49.000+0000" }, { "id": "379426", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "We should discuss that separately as this is currently urgent because of TIMOB-20537.\r\n\r\nWe already have ALOY-1118 to discuss theming {{tiapp.xml}}, including the chicken-egg problem (since the CLI will have loaded {{tiapp.xml}} by the time Alloy compiles.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-10T10:18:40.000+0000", "updated": "2016-03-10T10:18:40.000+0000" }, { "id": "379714", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "PR: https://github.com/appcelerator/alloy/pull/766\r\n\r\n[~fokkezb] Care to give this a go? You can put {{platform}} and {{i18n}} directories in your {{app}} folder. When you build, the {{platform/}} and {{i18n}} folders in the root of the project get nuked and the files copied from the {{app/platform}} and {{app/i18n}} directories. There's no way logic to preserve the {{platform}} and {{i18n}} directories. Users will need to move those folders into the {{app}} directory. You can override the Alloy app {{platform}} and {{i18n}} files by using a theme. Lastly, a custom widget may have an {{i18n}} directory structure which gets merged with the {{app/i18n}} and {{app/themes//i18n}} stings.\r\n\r\nThis PR does not do any sort of differential build or smart file copying. It's not great, but it's also not terrible. At least it's only nuke the {{platform/}} instead of nuking the entire {{platform}} directory.\r\n\r\nThere are no changes at the Titanium SDK level. This is purely solved in Alloy.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2016-03-15T05:50:04.000+0000", "updated": "2016-03-15T05:50:04.000+0000" }, { "id": "379725", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Thanks [~cbarber]. I've tested all combinations I could think off and left a few comments on the PR.\r\n\r\nTwo ideas for simple improvements not related to your changes.\r\n\r\nBut more importantly two ideas to make sure this breaking change (which it still is after all) at least not deletes people's project {{i18n}} and {{platform}} folders without notice. We really can't just be deleting those. There's still people without versioning and backups there :D\r\n\r\nI also think we should bump Alloy to 1.8 to signal the impact of this change. Of course any breaking change should bump major and I'm fine with that as well, but since we've been adding features to patch versions since 1.7 I thought 1.8 would be more appropriate. In anyway, the error in the ideas I suggested needs to have the version we release this with.\r\n\r\n[~cng] we need to make sure CLI 5.2.1 has this Alloy version, of course.\r\n\r\nI'll do a blog post on Alloy theming to give this good exposure as well.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-15T09:10:34.000+0000", "updated": "2016-03-15T09:10:55.000+0000" }, { "id": "379730", "author": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "body": "[~cbarber] [~fokkezb] you can easily handle the concerns of deleting the root i18n and platform when putting this back in which will allow all existing projects to remain without change but be ready to update when the dev wants them to. \r\n\r\n* Check to see if there is a theme folder, if there is check to see if the current theme has an i18n or a platform folder individually. If i18n matches then delete the matching root folder and copy the theme folder. Then repeat with the platform folder. If one or both does not exist then NO root folders are touched. If only one folder exists inside theme then ONLY that matching one is deleted - not the other. This allows the dev to only change one of the choose to and makes sure if the do not use the facility then no folders are deleted. \r\n* If a matching folder inside theme was not found then check if i18n or platform folders are inside the app folder. If at least one is that was not already processed via the theme point above then repeat the same logic as the first point. \r\n* In essence you ONLY delete a root folder if a matching folder exists in theme and if not in theme in app. I18n and platform folder checking are treated independently of each other. You do not delete root platform just because i18n folder was found you MUST also have found platform. \r\n* New projects should have i18n and platform folders automatically created inside the app folder and documentation updated to match. \r\n* Apps that have i18n or platform folders in the root but not in either theme or app folders should see a warning during processing to show those folders should be moved and be given a URL to the docs to see why\r\n\r\nThis way all existing projects can continue as they do right now as root folders will not be deleted as there are no theme or app folder versions. When devs start to take advantage of the ability to relocate the platform and i18n folders. \r\n\r\nA few if statements resolves all the problems and the warning console entry forwarns the need to update the app structure. ", "updateAuthor": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "created": "2016-03-15T10:03:58.000+0000", "updated": "2016-03-15T10:03:58.000+0000" }, { "id": "379771", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "Thanks for the feedback. I updated the PR with a bunch of fixes.\r\n\r\nFirst and foremost, I have now made it so that Alloy will create a file called {{alloy_generated}} in the {{/i18n}} and {{/platform}} directories. If this file exists, then I can nuke it without worry. If the {{alloy_generated}} file is missing, then the build fails with a message saying you must move those folders into your {{app}} directory. It's simple and robust.\r\n\r\nI also:\r\n* Fixed the i18n XML parsing to be more robust\r\n* Added {{/i18n}} and {{/platform}} to the {{.gitignore}} for new projects\r\n* Print a warning if there's a {{.gitignore}} and it's missing {{/i18n}}, {{/platform}}, or {{/Resources}}\r\n* Fixed a small bug with Alloy's hook when parsing the output from the subprocessed Alloy compile command\r\n* Bumped the version number to 1.8.0", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2016-03-15T18:42:59.000+0000", "updated": "2016-03-15T18:43:26.000+0000" }, { "id": "379830", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~cbarber] looking good. One thing though, related to [~core13]'s remarks.\r\n\r\nIf you {{ti create}} a Titanium project it includes {{/platform}}. Then if you run {{alloy new}} it will currently leave that folder there. After this PR the first time you {{alloy compile}} it will fail saying you need to move {{/platform}}.\r\n\r\nSo, I think to finish this off we should modify [new|https://github.com/appcelerator/alloy/blob/master/Alloy/commands/new/index.js] to:\r\n\r\n* Move {{/platform}} and {{/i18n}} under {{/app}}\r\n* [Ensure|https://github.com/appcelerator/alloy/blob/master/Alloy/commands/new/index.js#L23] {{/app/platform}}, {{/app/i18n}} (and I'd say also {{/app/lib}}) like it does with {{/app/models}} as a hint even if you don't have these folders.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-16T08:19:41.000+0000", "updated": "2016-03-16T08:19:41.000+0000" }, { "id": "379915", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "[~fokkezb] Done! Please review one last time.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2016-03-16T20:55:07.000+0000", "updated": "2016-03-16T20:55:07.000+0000" }, { "id": "380262", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "Here's the docs:\r\n\r\n{quote}\r\nAlloy has improved i18n and platform-specific resources support. You can now add \"i18n\" and \"platform\" directories in your \"/app\" directory and in your active theme's directory. Additionally, widgets may also have an \"i18n\" directory.\r\n\r\nWhen you build your app, Alloy will delete the \"/i18n\" and \"/platform/\" directories in the project's root directory. Next it will copy and merge the \"i18n\" and \"platform/\" directories from the Alloy app's directory into the project's root directory. For platform-specific files, it starts by copying all files from \"/app/platform/\", then overrides with files from \"/app/theme//platform/\". i18n files are copied from the \"/app/i18n\" and \"/app/themes//i18n\" directories followed by the each widget's \"/app/widgets//i18n\" directory.\r\n\r\nIt's important to reiterate that the \"/i18n\", \"/platform/\", and \"/Resources\" directories are regenerated each time you build. Any manual change to files in these directories will be lost during the next build.\r\n\r\nWhen creating a new Alloy project, it will automatically move existing \"/i18n\" and \"/platform\" directories into the \"/app\" directory.\r\n\r\nExisting Alloy apps that already have \"/i18n\" or \"/platform\" directories in the project's root directory will fail to build until these directories into the \"/app\" directory.\r\n{quote}", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2016-03-21T16:58:58.000+0000", "updated": "2016-03-21T16:58:58.000+0000" }, { "id": "380497", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "One note in regards to:\r\n\r\n{quote}followed by the each widget's \"/app/widgets//i18n\" directory.{quote}\r\n\r\nIt is important to note that although widget i18n comes last, it won't override existing strings. This allows you to override widget strings in your theme.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-23T09:42:46.000+0000", "updated": "2016-03-23T09:42:46.000+0000" }, { "id": "380500", "author": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "body": "[~fokkezb] do you mean that i18n files are simply copied and if one already exists then it is overwritten?\r\n\r\nOr would widget i18n entries be merged into theme i18n entries if they exist and then merged into app i18n entries?\r\n\r\nI think a few example files in all possible locations with suitable strings should be given complete with the expected fully merged i18n that would then be used by the app itself. \r\n\r\nProvided suitable string examples are given then this will make the trickle down rules very clear. ", "updateAuthor": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "created": "2016-03-23T10:11:28.000+0000", "updated": "2016-03-23T10:11:28.000+0000" }, { "id": "380505", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~core13] what I mean is that the behaviour is unchanged:\r\n\r\n* i18n XML files are merged\r\n* Although i18n XML files from widgets come last, they don't override existing strings, allowing you to override strings from (third-party) widgets in your theme or main i18n files.\r\n\r\nI have a blog post ready", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-23T10:36:43.000+0000", "updated": "2016-03-23T10:36:43.000+0000" }, { "id": "380594", "author": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "body": "[~fokkezb] When updating features do you have a dependency checklist that you through to make sure that new rules work with dependant features as well?\r\n\r\n{noformat}\r\n alloy extract-i18n en —apply\r\n{noformat}\r\n\r\nThis does not honour the correct locations of the app is an Alloy project. It always exports to the \\{project/i18n/\\} folder rather than the \\{project/app/i18n/\\} folder. \r\n\r\nIf you use a dependency checklist (sometimes called a knock-ons list) a lot of these issues that then need immediate triage would simply never occur. ", "updateAuthor": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "created": "2016-03-24T10:36:03.000+0000", "updated": "2016-03-24T10:36:03.000+0000" }, { "id": "380596", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~core13] No, apparently there was no unit test for {{alloy extract-i18n}}, which of course we should have.\r\n\r\nLuckily [~sfeather] found this bug already and we've got it fixed: ALOY-1375", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-24T10:50:35.000+0000", "updated": "2016-03-24T10:55:07.000+0000" }, { "id": "380652", "author": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Verified fixed, using:\r\n\r\nMacOS 10.11.4 (15E65)\r\nStudio 4.5.0.201602170821\r\nTi SDK 5.2.1.v20160318225121\r\nAppc NPM 4.2.4-2\r\nAppc CLI 5.2.1-21\r\nAlloy 1.8.2\r\nXcode 7.3 (7D175)\r\n\r\nThe projects i18n and platform directories function as stated by Chris Barber, in the comments. They are copied from the /app directory, merged with theme and widget directories when appropriate, and sent back into the root folders with the addition of an alloy_generated file that indicates they have undergone this process. Builds fail with a message if the alloy_generated file is not present. Tested with multiple apps using different combinations of i18n and platform folder locations.", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-03-24T21:28:25.000+0000", "updated": "2016-03-24T21:28:25.000+0000" } ], "maxResults": 19, "total": 19, "startAt": 0 } } }