diff --git a/gooddata-sdk/gooddata_sdk/catalog/workspace/service.py b/gooddata-sdk/gooddata_sdk/catalog/workspace/service.py index b4f5e81cd..c69473319 100644 --- a/gooddata-sdk/gooddata_sdk/catalog/workspace/service.py +++ b/gooddata-sdk/gooddata_sdk/catalog/workspace/service.py @@ -922,7 +922,7 @@ def add_metadata_locale( Args: workspace_id (str): The ID of the workspace. target_language (str): The target language for the metadata localization. - translator_func (Optional[Callable]): A function to translate the source text. + translator_func (Callable): A function to translate the source text. set_locale (bool): Flag to indicate if the locale settings should be updated in the workspace. Returns: diff --git a/gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml b/gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml new file mode 100644 index 000000000..b826faa4f --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml @@ -0,0 +1,2478 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/clean + body: + locale: fr-FR + headers: + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: '' + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign + channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue + in Category% Revenue + per ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 + CustomersFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign + channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue + in Category% Revenue + per ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 + CustomersFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/set + body: ' + + CampaignCampaign.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign SpendCampaign Spend.Revenue per $ vs Spend by CampaignRevenue per $ vs Spend + by Campaign.Spend + breakdown and RevenueSpend breakdown and Revenue.The first insight shows a breakdown of spend by category and campaign. The + second shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.The first insight shows a breakdown of spend + by category and campaign. The second shows revenue per $ spend, for each campaign, + to demonstrate, how campaigns are successful..Dashboard + pluginDashboard plugin.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.DHO simpleDHO simple.Product + & CategoryProduct & Category.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Top 10 ProductsTop 10 Products.Revenue TrendRevenue Trend.Customers TrendCustomers Trend.Product Categories Pie ChartProduct Categories Pie Chart.Product BreakdownProduct Breakdown.Product SaleabilityProduct Saleability.% Revenue per Product by Customer and Category% Revenue + per Product by Customer and Category.Campaign + channel idCampaign channel id.Campaign channel + idCampaign channel id.Campaign + channelsCampaign channels.CategoryCategory.CategoryCategory.Campaign channelsCampaign + channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Order + idOrder id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute + of the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour of + the Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of + the Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.StateState.StateState.CustomersCustomers.Date + - Day of MonthDate - Day of Month.Generic Day of + the Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of + the Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week (W1-W53)Generic + Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month + (M1-M12)Generic Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channelsCampaign channels.Campaign channelsCampaign + channels.Campaign + channelsCampaign channels.CampaignsCampaigns.CampaignsCampaigns.CampaignsCampaigns.CustomersCustomers.CustomersCustomers.CustomersCustomers.Order + linesOrder lines.Order + linesOrder lines.Order + linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.BudgetBudget.BudgetBudget.Campaign channelsCampaign + channels.SpendSpend.SpendSpend.Campaign channelsCampaign + channels.PricePrice.PricePrice.Order linesOrder lines.QuantityQuantity.QuantityQuantity.Order linesOrder + lines.Order idOrder + id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute of + the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour of the + Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of the + Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.Date + - Day of MonthDate - Day of Month.Generic Day of the + Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of the + Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week (W1-W53)Generic + Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month (M1-M12)Generic + Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channel idCampaign channel id.Campaign channel + idCampaign channel id.Campaign + channelsCampaign channels.CategoryCategory.CategoryCategory.Campaign channelsCampaign + channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.LocationLocation.LocationLocation.CustomersCustomers.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + / Top 10Revenue / Top 10.Revenue + / Top 10%Revenue / Top 10%.Total + RevenueTotal Revenue.Total + Revenue (No Filters)Total Revenue (No Filters).# + of Orders# of Orders.# + of Top Customers# of Top Customers.# + of Valid Orders# of Valid Orders.Campaign + SpendCampaign Spend.Order + AmountOrder Amount.% + Revenue% Revenue.% + Revenue from Top 10 Customers% Revenue from Top 10 Customers.% + Revenue from Top 10% Customers% Revenue from Top 10% Customers.% + Revenue from Top 10% Products% Revenue from Top 10% Products.# + of Active Customers# of Active Customers.% + Revenue from Top 10 Products% Revenue from Top 10 Products.% + Revenue in Category% Revenue in Category.% + Revenue per Product% Revenue per Product.RevenueRevenue.Revenue + (Clothing)Revenue (Clothing).Revenue + (Electronic)Revenue (Electronic).Revenue + (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue + per CustomerRevenue per Customer.% + Revenue per Product by Customer and Category% Revenue per + Product by Customer and Category.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.% + Revenue per Product% Revenue per Product.RevenueRevenue.Campaign + SpendCampaign Spend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Campaign + SpendCampaign Spend.Customers + TrendCustomers Trend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.# + of Active Customers# of Active Customers.Revenue + per CustomerRevenue per Customer.Active + CustomersActive Customers.Percentage + of Customers by RegionPercentage of Customers by Region.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.# + of Active Customers# of Active Customers.Product + BreakdownProduct Breakdown.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Product + Categories Pie ChartProduct Categories Pie Chart.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.% + Revenue% Revenue.Product + Revenue Comparison (over previous period)Product Revenue + Comparison (over previous period).Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue.Previous + PeriodPrevious Period.This + PeriodThis Period.Product + SaleabilityProduct Saleability.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.# + of Orders# of Orders.RevenueRevenue.Number + of OrdersNumber of Orders.Revenue + and Quantity by Product and CategoryRevenue and Quantity + by Product and Category.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Sum + of QuantitySum of Quantity.Avg + PriceAvg Price.% + Revenue in Category% Revenue in Category.RevenueRevenue.Items + SoldItems Sold.Total + RevenueTotal Revenue.Revenue + by Category TrendRevenue by Category Trend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue.Revenue + by ProductRevenue by Product.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Revenue + per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Campaign + SpendCampaign Spend.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + TrendRevenue Trend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue.# + of Orders# of Orders.Number + of OrdersNumber of Orders.Top + 10 CustomersTop 10 Customers.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.Top + 10 ProductsTop 10 Products.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext.' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate, br + Connection: + - keep-alive + Content-Length: + - '56610' + Content-Type: + - application/xml + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: '' + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '56630' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignCampaign.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendCampaign Spend.Revenue + per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Spend + breakdown and RevenueSpend breakdown and Revenue.The + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.The first insight shows a breakdown of spend + by category and campaign. The second shows revenue per $ spend, for each + campaign, to demonstrate, how campaigns are successful..Dashboard + pluginDashboard plugin.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.DHO + simpleDHO simple.Product + & CategoryProduct & Category.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsTop 10 Products.Revenue + TrendRevenue Trend.Customers + TrendCustomers Trend.Product + Categories Pie ChartProduct Categories Pie Chart.Product + BreakdownProduct Breakdown.Product + SaleabilityProduct Saleability.% + Revenue per Product by Customer and Category% Revenue per + Product by Customer and Category.Campaign + channel idCampaign channel id.Campaign + channel idCampaign channel id.Campaign channelsCampaign + channels.CategoryCategory.CategoryCategory.Campaign + channelsCampaign channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Order + idOrder id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute + of the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour + of the Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of + the Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.StateState.StateState.CustomersCustomers.Date + - Day of MonthDate - Day of Month.Generic Day + of the Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of + the Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week + (W1-W53)Generic Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month + (M1-M12)Generic Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channelsCampaign channels.Campaign channelsCampaign + channels.Campaign + channelsCampaign channels.CampaignsCampaigns.CampaignsCampaigns.CampaignsCampaigns.CustomersCustomers.CustomersCustomers.CustomersCustomers.Order + linesOrder lines.Order + linesOrder lines.Order + linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.BudgetBudget.BudgetBudget.Campaign channelsCampaign + channels.SpendSpend.SpendSpend.Campaign channelsCampaign + channels.PricePrice.PricePrice.Order linesOrder + lines.QuantityQuantity.QuantityQuantity.Order linesOrder + lines.Order + idOrder id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute + of the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour of the + Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of the + Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.Date + - Day of MonthDate - Day of Month.Generic Day of the + Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of the + Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week (W1-W53)Generic + Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month (M1-M12)Generic + Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channel idCampaign channel id.Campaign channel + idCampaign channel id.Campaign + channelsCampaign channels.CategoryCategory.CategoryCategory.Campaign channelsCampaign + channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.LocationLocation.LocationLocation.CustomersCustomers.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + / Top 10Revenue / Top 10.Revenue + / Top 10%Revenue / Top 10%.Total + RevenueTotal Revenue.Total + Revenue (No Filters)Total Revenue (No Filters).# + of Orders# of Orders.# + of Top Customers# of Top Customers.# + of Valid Orders# of Valid Orders.Campaign + SpendCampaign Spend.Order + AmountOrder Amount.% + Revenue% Revenue.% + Revenue from Top 10 Customers% Revenue from Top 10 Customers.% + Revenue from Top 10% Customers% Revenue from Top 10% Customers.% + Revenue from Top 10% Products% Revenue from Top 10% Products.# + of Active Customers# of Active Customers.% + Revenue from Top 10 Products% Revenue from Top 10 Products.% + Revenue in Category% Revenue in Category.% + Revenue per Product% Revenue per Product.RevenueRevenue.Revenue + (Clothing)Revenue (Clothing).Revenue + (Electronic)Revenue (Electronic).Revenue + (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue + per CustomerRevenue per Customer.% + Revenue per Product by Customer and Category% Revenue per + Product by Customer and Category.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per Product% Revenue per Product.RevenueRevenue.Campaign + SpendCampaign Spend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCampaign Spend.Customers + TrendCustomers Trend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active Customers# of Active Customers.Revenue + per CustomerRevenue per Customer.Active + CustomersActive Customers.Percentage + of Customers by RegionPercentage of Customers by Region.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active Customers# of Active Customers.Product + BreakdownProduct Breakdown.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Product + Categories Pie ChartProduct Categories Pie Chart.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue% Revenue.Product + Revenue Comparison (over previous period)Product Revenue + Comparison (over previous period).Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue.Previous + PeriodPrevious Period.This + PeriodThis Period.Product + SaleabilityProduct Saleability.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.# + of Orders# of Orders.RevenueRevenue.Number + of OrdersNumber of Orders.Revenue + and Quantity by Product and CategoryRevenue and Quantity + by Product and Category.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantitySum of Quantity.Avg + PriceAvg Price.% + Revenue in Category% Revenue in Category.RevenueRevenue.Items + SoldItems Sold.Total + RevenueTotal Revenue.Revenue + by Category TrendRevenue by Category Trend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue.Revenue + by ProductRevenue by Product.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Revenue + per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCampaign Spend.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + TrendRevenue Trend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue.# + of Orders# of Orders.Number + of OrdersNumber of Orders.Top + 10 CustomersTop 10 Customers.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.Top + 10 ProductsTop 10 Products.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext. + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/clean + body: + locale: fr-FR + headers: + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: '' diff --git a/gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml b/gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml new file mode 100644 index 000000000..948427aab --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml @@ -0,0 +1,3022 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/clean + body: + locale: fr-FR + headers: + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: '' + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign + channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue + in Category% Revenue + per ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 + CustomersFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign + channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue + in Category% Revenue + per ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 + CustomersFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/set + body: ' + + CampaignCampaign.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign SpendCampaign Spend.Revenue per $ vs Spend by CampaignRevenue per $ vs Spend + by Campaign.Spend + breakdown and RevenueSpend breakdown and Revenue.The first insight shows a breakdown of spend by category and campaign. The + second shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.The first insight shows a breakdown of spend + by category and campaign. The second shows revenue per $ spend, for each campaign, + to demonstrate, how campaigns are successful..Dashboard + pluginDashboard plugin.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.DHO simpleDHO simple.Product + & CategoryProduct & Category.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Top 10 ProductsTop 10 Products.Revenue TrendRevenue Trend.Customers TrendCustomers Trend.Product Categories Pie ChartProduct Categories Pie Chart.Product BreakdownProduct Breakdown.Product SaleabilityProduct Saleability.% Revenue per Product by Customer and Category% Revenue + per Product by Customer and Category.Campaign + channel idCampaign channel id.Campaign channel + idCampaign channel id.Campaign + channelsCampaign channels.CategoryCategory.CategoryCategory.Campaign channelsCampaign + channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Order + idOrder id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute + of the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour of + the Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of + the Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.StateState.StateState.CustomersCustomers.Date + - Day of MonthDate - Day of Month.Generic Day of + the Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of + the Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week (W1-W53)Generic + Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month + (M1-M12)Generic Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channelsCampaign channels.Campaign channelsCampaign + channels.Campaign + channelsCampaign channels.CampaignsCampaigns.CampaignsCampaigns.CampaignsCampaigns.CustomersCustomers.CustomersCustomers.CustomersCustomers.Order + linesOrder lines.Order + linesOrder lines.Order + linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.BudgetBudget.BudgetBudget.Campaign channelsCampaign + channels.SpendSpend.SpendSpend.Campaign channelsCampaign + channels.PricePrice.PricePrice.Order linesOrder lines.QuantityQuantity.QuantityQuantity.Order linesOrder + lines.Order idOrder + id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute of + the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour of the + Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of the + Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.Date + - Day of MonthDate - Day of Month.Generic Day of the + Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of the + Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week (W1-W53)Generic + Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month (M1-M12)Generic + Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channel idCampaign channel id.Campaign channel + idCampaign channel id.Campaign + channelsCampaign channels.CategoryCategory.CategoryCategory.Campaign channelsCampaign + channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.LocationLocation.LocationLocation.CustomersCustomers.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + / Top 10Revenue / Top 10.Revenue + / Top 10%Revenue / Top 10%.Total + RevenueTotal Revenue.Total + Revenue (No Filters)Total Revenue (No Filters).# + of Orders# of Orders.# + of Top Customers# of Top Customers.# + of Valid Orders# of Valid Orders.Campaign + SpendCampaign Spend.Order + AmountOrder Amount.% + Revenue% Revenue.% + Revenue from Top 10 Customers% Revenue from Top 10 Customers.% + Revenue from Top 10% Customers% Revenue from Top 10% Customers.% + Revenue from Top 10% Products% Revenue from Top 10% Products.# + of Active Customers# of Active Customers.% + Revenue from Top 10 Products% Revenue from Top 10 Products.% + Revenue in Category% Revenue in Category.% + Revenue per Product% Revenue per Product.RevenueRevenue.Revenue + (Clothing)Revenue (Clothing).Revenue + (Electronic)Revenue (Electronic).Revenue + (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue + per CustomerRevenue per Customer.% + Revenue per Product by Customer and Category% Revenue per + Product by Customer and Category.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.% + Revenue per Product% Revenue per Product.RevenueRevenue.Campaign + SpendCampaign Spend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Campaign + SpendCampaign Spend.Customers + TrendCustomers Trend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.# + of Active Customers# of Active Customers.Revenue + per CustomerRevenue per Customer.Active + CustomersActive Customers.Percentage + of Customers by RegionPercentage of Customers by Region.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.# + of Active Customers# of Active Customers.Product + BreakdownProduct Breakdown.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Product + Categories Pie ChartProduct Categories Pie Chart.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.% + Revenue% Revenue.Product + Revenue Comparison (over previous period)Product Revenue + Comparison (over previous period).Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue.Previous + PeriodPrevious Period.This + PeriodThis Period.Product + SaleabilityProduct Saleability.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.# + of Orders# of Orders.RevenueRevenue.Number + of OrdersNumber of Orders.Revenue + and Quantity by Product and CategoryRevenue and Quantity + by Product and Category.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Sum + of QuantitySum of Quantity.Avg + PriceAvg Price.% + Revenue in Category% Revenue in Category.RevenueRevenue.Items + SoldItems Sold.Total + RevenueTotal Revenue.Revenue + by Category TrendRevenue by Category Trend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue.Revenue + by ProductRevenue by Product.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Revenue + per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Campaign + SpendCampaign Spend.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + TrendRevenue Trend.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue.# + of Orders# of Orders.Number + of OrdersNumber of Orders.Top + 10 CustomersTop 10 Customers.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.Top + 10 ProductsTop 10 Products.Free-form + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext.' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate, br + Connection: + - keep-alive + Content-Length: + - '56610' + Content-Type: + - application/xml + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: '' + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '56630' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignCampaign.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendCampaign Spend.Revenue + per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Spend + breakdown and RevenueSpend breakdown and Revenue.The + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.The first insight shows a breakdown of spend + by category and campaign. The second shows revenue per $ spend, for each + campaign, to demonstrate, how campaigns are successful..Dashboard + pluginDashboard plugin.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.DHO + simpleDHO simple.Product + & CategoryProduct & Category.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsTop 10 Products.Revenue + TrendRevenue Trend.Customers + TrendCustomers Trend.Product + Categories Pie ChartProduct Categories Pie Chart.Product + BreakdownProduct Breakdown.Product + SaleabilityProduct Saleability.% + Revenue per Product by Customer and Category% Revenue per + Product by Customer and Category.Campaign + channel idCampaign channel id.Campaign + channel idCampaign channel id.Campaign channelsCampaign + channels.CategoryCategory.CategoryCategory.Campaign + channelsCampaign channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Order + idOrder id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute + of the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour + of the Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of + the Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.StateState.StateState.CustomersCustomers.Date + - Day of MonthDate - Day of Month.Generic Day + of the Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of + the Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week + (W1-W53)Generic Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month + (M1-M12)Generic Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channelsCampaign channels.Campaign channelsCampaign + channels.Campaign + channelsCampaign channels.CampaignsCampaigns.CampaignsCampaigns.CampaignsCampaigns.CustomersCustomers.CustomersCustomers.CustomersCustomers.Order + linesOrder lines.Order + linesOrder lines.Order + linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.BudgetBudget.BudgetBudget.Campaign channelsCampaign + channels.SpendSpend.SpendSpend.Campaign channelsCampaign + channels.PricePrice.PricePrice.Order linesOrder + lines.QuantityQuantity.QuantityQuantity.Order linesOrder + lines.Order + idOrder id.Order + idOrder id.Order + linesOrder lines.Order + line idOrder line id.Order + line idOrder line id.Order + linesOrder lines.Order + statusOrder status.Order + statusOrder status.Order + linesOrder lines.Product + idProduct id.Product + idProduct id.ProductsProducts.Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date + - MinuteDate - Minute.MinuteMinute.DateDate.Date + - HourDate - Hour.HourHour.DateDate.Date + - DateDate - Date.DateDate.DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Date + - Minute of HourDate - Minute of Hour.Generic Minute + of the Hour(MI1-MI60)Generic Minute of the Hour(MI1-MI60).DateDate.Date + - Hour of DayDate - Hour of Day.Generic Hour of the + Day(H1-H24)Generic Hour of the Day(H1-H24).DateDate.Date + - Day of WeekDate - Day of Week.Generic Day of the + Week (D1-D7)Generic Day of the Week (D1-D7).DateDate.Date + - Day of MonthDate - Day of Month.Generic Day of the + Month (D1-D31)Generic Day of the Month (D1-D31).DateDate.Date + - Day of YearDate - Day of Year.Generic Day of the + Year (D1-D366)Generic Day of the Year (D1-D366).DateDate.Date + - Week of YearDate - Week of Year.Generic Week (W1-W53)Generic + Week (W1-W53).DateDate.Date + - Month of YearDate - Month of Year.Generic Month (M1-M12)Generic + Month (M1-M12).DateDate.Date + - Quarter of YearDate - Quarter of Year.Generic Quarter + (Q1-Q4)Generic Quarter (Q1-Q4).DateDate.Campaign + channel idCampaign channel id.Campaign channel + idCampaign channel id.Campaign + channelsCampaign channels.CategoryCategory.CategoryCategory.Campaign channelsCampaign + channels.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign idCampaign + id.Campaign + idCampaign id.CampaignsCampaigns.Campaign + nameCampaign name.Campaign + nameCampaign name.CampaignsCampaigns.Customer + idCustomer id.Customer + idCustomer id.CustomersCustomers.Customer + nameCustomer name.Customer + nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.LocationLocation.LocationLocation.CustomersCustomers.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + / Top 10Revenue / Top 10.Revenue + / Top 10%Revenue / Top 10%.Total + RevenueTotal Revenue.Total + Revenue (No Filters)Total Revenue (No Filters).# + of Orders# of Orders.# + of Top Customers# of Top Customers.# + of Valid Orders# of Valid Orders.Campaign + SpendCampaign Spend.Order + AmountOrder Amount.% + Revenue% Revenue.% + Revenue from Top 10 Customers% Revenue from Top 10 Customers.% + Revenue from Top 10% Customers% Revenue from Top 10% Customers.% + Revenue from Top 10% Products% Revenue from Top 10% Products.# + of Active Customers# of Active Customers.% + Revenue from Top 10 Products% Revenue from Top 10 Products.% + Revenue in Category% Revenue in Category.% + Revenue per Product% Revenue per Product.RevenueRevenue.Revenue + (Clothing)Revenue (Clothing).Revenue + (Electronic)Revenue (Electronic).Revenue + (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue + per CustomerRevenue per Customer.% + Revenue per Product by Customer and Category% Revenue per + Product by Customer and Category.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per Product% Revenue per Product.RevenueRevenue.Campaign + SpendCampaign Spend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCampaign Spend.Customers + TrendCustomers Trend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active Customers# of Active Customers.Revenue + per CustomerRevenue per Customer.Active + CustomersActive Customers.Percentage + of Customers by RegionPercentage of Customers by Region.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active Customers# of Active Customers.Product + BreakdownProduct Breakdown.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Product + Categories Pie ChartProduct Categories Pie Chart.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue% Revenue.Product + Revenue Comparison (over previous period)Product Revenue + Comparison (over previous period).Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue.Previous + PeriodPrevious Period.This + PeriodThis Period.Product + SaleabilityProduct Saleability.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.# + of Orders# of Orders.RevenueRevenue.Number + of OrdersNumber of Orders.Revenue + and Quantity by Product and CategoryRevenue and Quantity + by Product and Category.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantitySum of Quantity.Avg + PriceAvg Price.% + Revenue in Category% Revenue in Category.RevenueRevenue.Items + SoldItems Sold.Total + RevenueTotal Revenue.Revenue + by Category TrendRevenue by Category Trend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue.Revenue + by ProductRevenue by Product.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.RevenueRevenue.Revenue + per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCampaign Spend.Revenue + per Dollar SpentRevenue per Dollar Spent.Revenue + TrendRevenue Trend.Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue.# + of Orders# of Orders.Number + of OrdersNumber of Orders.Top + 10 CustomersTop 10 Customers.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.Top + 10 ProductsTop 10 Products.Free-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext. + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/clean + body: + locale: fr-FR + headers: + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: '' + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign + channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue + in Category% Revenue + per ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 + CustomersFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext diff --git a/gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml b/gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml new file mode 100644 index 000000000..d7299c769 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml @@ -0,0 +1,548 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign + channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue + in Category% Revenue + per ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 + CustomersFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext diff --git a/gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml b/gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml new file mode 100644 index 000000000..36ff5c26a --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml @@ -0,0 +1,1085 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve + body: + locale: fr-FR + headers: + Accept: + - application/xml + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/xml + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign + channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue + in Category% Revenue + per ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 + CustomersFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about + its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining + the JSON path and the source text's value. Since this hash is hard to read, + the source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext + - request: + method: POST + uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/set + body: CampaignFree-form + translations are marked by the 'id' attribute, which is a hash combining the + JSON path and the source text's value. Since this hash is hard to read, the + source text includes extra details about its general location.Campaign + SpendRevenue + per $ vs Spend by CampaignSpend + breakdown and RevenueThe + first insight shows a breakdown of spend by category and campaign. The second + shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + are successful.Dashboard + pluginFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.DHO + simpleProduct + & CategoryFree-form + translations are marked by the 'id' attribute, which is a hash combining the + JSON path and the source text's value. Since this hash is hard to read, the + source text includes extra details about its general location.Top + 10 ProductsRevenue + TrendCustomers + TrendProduct + Categories Pie ChartProduct + BreakdownProduct + Saleability% + Revenue per Product by Customer and CategoryCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateStateStateCustomersDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channelsCampaign + channelsCampaign + channelsCampaignsCampaignsCampaignsCustomersCustomersCustomersOrder + linesOrder + linesOrder + linesProductsProductsProductsDateDateBudgetBudgetCampaign channelsSpendSpendCampaign channelsPricePriceOrder linesQuantityQuantityOrder linesOrder + idOrder + idOrder + linesOrder line idOrder line idOrder linesOrder + statusOrder + statusOrder + linesProduct idProduct idProductsProduct + nameProduct + nameProductsCategoryCategoryProductsDate + - MinuteMinuteDateDate + - HourHourDateDate + - DateDateDateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - YearYearDateDate + - Minute of HourGeneric + Minute of the Hour(MI1-MI60)DateDate + - Hour of DayGeneric + Hour of the Day(H1-H24)DateDate + - Day of WeekGeneric + Day of the Week (D1-D7)DateDate + - Day of MonthGeneric + Day of the Month (D1-D31)DateDate + - Day of YearGeneric + Day of the Year (D1-D366)DateDate + - Week of YearGeneric + Week (W1-W53)DateDate + - Month of YearGeneric + Month (M1-M12)DateDate + - Quarter of YearGeneric + Quarter (Q1-Q4)DateCampaign + channel idCampaign + channel idCampaign + channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign + idCampaign + idCampaignsCampaign + nameCampaign + nameCampaignsCustomer + idCustomer + idCustomersCustomer + nameCustomer + nameCustomersRegionRegionCustomersStateStateCustomersLocationLocationCustomersRevenue + per Dollar SpentRevenue / Top 10Revenue + / Top 10%Total RevenueTotal + Revenue (No Filters)# of Orders# + of Top Customers# of Valid OrdersCampaign + SpendOrder Amount% + Revenue% + Revenue from Top 10 Customers% + Revenue from Top 10% Customers% + Revenue from Top 10% Products# of Active + Customers% + Revenue from Top 10 Products% Revenue in + Category% Revenue per + ProductRevenueRevenue + (Clothing)Revenue (Electronic)Revenue + (Home)Revenue (Outdoor)Revenue + per Customer% + Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.% + Revenue per ProductRevenueCampaign + SpendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.Campaign + SpendCustomers + TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.# + of Active CustomersRevenue + per CustomerActive + CustomersPercentage + of Customers by RegionFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.# + of Active CustomersProduct + BreakdownFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueProduct + Categories Pie ChartFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.% + RevenueProduct + Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenuePrevious + PeriodThis + PeriodProduct + SaleabilityFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.# + of OrdersRevenueNumber + of OrdersRevenue + and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.Sum + of QuantityAvg + Price% + Revenue in CategoryRevenueItems + SoldTotal + RevenueRevenue + by Category TrendFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue + by ProductFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.RevenueRevenue + per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, + which is a hash combining the JSON path and the source text's value. Since + this hash is hard to read, the source text includes extra details about its + general location.Campaign + SpendRevenue + per Dollar SpentRevenue TrendFree-form + translations are marked by the 'id' attribute, which is a hash combining the + JSON path and the source text's value. Since this hash is hard to read, the + source text includes extra details about its general location.Revenue# + of OrdersNumber + of OrdersTop 10 CustomersFree-form + translations are marked by the 'id' attribute, which is a hash combining the + JSON path and the source text's value. Since this hash is hard to read, the + source text includes extra details about its general location.Revenue + / Top 10Top 10 ProductsFree-form + translations are marked by the 'id' attribute, which is a hash combining the + JSON path and the source text's value. Since this hash is hard to read, the + source text includes extra details about its general location.Revenue + / Top 10filterContextfilterContext + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate, br + Connection: + - keep-alive + Content-Length: + - '47036' + Content-Type: + - application/xml + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Set-Cookie: + - SPRING_REDIRECT_URI=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 + GMT; HttpOnly; SameSite=Lax + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - 1 ; mode=block + body: + string: '' diff --git a/gooddata-sdk/tests/catalog/test_catalog_workspace.py b/gooddata-sdk/tests/catalog/test_catalog_workspace.py index cda94c720..71a054e7b 100644 --- a/gooddata-sdk/tests/catalog/test_catalog_workspace.py +++ b/gooddata-sdk/tests/catalog/test_catalog_workspace.py @@ -4,6 +4,7 @@ import json from pathlib import Path from typing import List +from xml.etree import ElementTree as ET import yaml from gooddata_sdk import ( @@ -840,3 +841,82 @@ def test_update_workspace_setting(test_config): finally: sdk.catalog_workspace.delete_workspace_setting(test_config["workspace"], setting_id) assert len(sdk.catalog_workspace.list_workspace_settings(test_config["workspace"])) == 0 + + +@gd_vcr.use_cassette(str(_fixtures_dir / "get_metadata_localization.yaml")) +def test_get_metadata_localization(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + test_workspace = test_config["workspace"] + xliff = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + tree = ET.ElementTree(ET.fromstring(xliff)) + + # Check, if the returned xliff is valid. + assert tree is not None + + +@gd_vcr.use_cassette(str(_fixtures_dir / "set_metadata_localization.yaml")) +def test_set_metadata_localization(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + test_workspace = test_config["workspace"] + xliff = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + sdk.catalog_workspace.set_metadata_localization(workspace_id=test_workspace, encoded_xml=xliff) + + +@gd_vcr.use_cassette(str(_fixtures_dir / "add_metadata_locale.yaml")) +def test_add_metadata_locale(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + test_workspace = test_config["workspace"] + + def translate( + to_translate: str, + already_translated: bool = False, + old_translation: str = "", + ): + return f"{to_translate}." + + sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + xliff_before = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + sdk.catalog_workspace.add_metadata_locale( + workspace_id=test_workspace, target_language="fr-FR", translator_func=translate, set_locale=False + ) + + xliff_after = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + assert xliff_before != xliff_after + + +@gd_vcr.use_cassette(str(_fixtures_dir / "clean_metadata_locale.yaml")) +def test_clean_metadata_locale(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + test_workspace = test_config["workspace"] + + def translate( + to_translate: str, + already_translated: bool = False, + old_translation: str = "", + ): + return f"{to_translate}." + + sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + xliff_before = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + sdk.catalog_workspace.add_metadata_locale( + workspace_id=test_workspace, target_language="fr-FR", translator_func=translate, set_locale=False + ) + + xliff_after = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + assert xliff_before != xliff_after + + sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + xliff_after = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR") + + assert xliff_before == xliff_after diff --git a/tests-support/tests_support/vcrpy_utils.py b/tests-support/tests_support/vcrpy_utils.py index 5d34207d2..34af5132d 100644 --- a/tests-support/tests_support/vcrpy_utils.py +++ b/tests-support/tests_support/vcrpy_utils.py @@ -42,10 +42,16 @@ def deserialize(self, cassette_string: str) -> dict[str, Any]: request_body = interaction["request"]["body"] response_body = interaction["response"]["body"] if request_body is not None: - interaction["request"]["body"] = json.dumps(request_body) + if isinstance(request_body, str) and request_body.startswith(" str: request_body = interaction["request"]["body"] response_body = interaction["response"]["body"] if request_body is not None: - interaction["request"]["body"] = json.loads(request_body) + try: + interaction["request"]["body"] = json.loads(request_body) + except (JSONDecodeError, UnicodeDecodeError): + # The response can be in XML + interaction["request"]["body"] = request_body if response_body is not None and response_body["string"] != "": try: interaction["response"]["body"]["string"] = json.loads(response_body["string"])