promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"us","sms_allowed_countries":[],"sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_allowed":false,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":null,"insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear yBrake Rotors
":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_
ackground_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0",Brake Spares
ght.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eBuilt to be practical and functional, the bag is held firmly in place with a rubberised velcro strap and an adjustable MOLLE hypalon fitting, which allows the bag to function seamlessly with all Restrap Frame Bags. A rigid internal plastic structure keeps the bag upright and stable and the universal headset fitting accommodates all headsets, including bikes with a low stack height. A stretch mesh side pocket provides storage for nutrition, wrappers and other on-the-fly essentials.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eSKU - RS_RTT_STD_BLK\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eCapacity - 1.5L\u003c\/span\u003e\u003cbr\u003e\u003cspan\u003eWeight - 183g\u003c\/span\u003e\u003cbr\u003e\u003c\/p\u003e","published_at":"2024-10-01T10:55:25+01:00","created_at":"2024-10-01T10:55:25+01:00","vendor":"Restrap","type":"bag","tags":["Race Top Tube Bag","spo-cs-disabled","spo-default","spo-disabled","spo-notify-m
\/shop\/files\/RS_RTT_STD_BLK_RaceTopTubeBag.jpg?v=1727776449"},"aspect_ratio":1.0,"height":1024,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/RS_RTT_STD_BLK_RaceTopTubeBag.jpg?v=1727776449","width":1024}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003eDurable and lightweight, the Adventure Race Top Tube Bag is designed with ultra-distance racing and audaxing in mind. An X21 technical waterproof outer, waterproof 6oz nylon inner lining and YKK aquaguard two-way zip keeps inclement weather at bay, whilst reflective detailing boosts visibility and safety when riding through the night.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eBuilt to be practical and functional, the bag is held firmly in place with a rubberised velcro strap and an adjustable MOLLE hypalon fitting, which allows the bag to function seamlessly with all Restrap Frame Bags. A rigid internal plastic structure keeps the bag upri
translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't translated, applyTranslations will gracefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
// Don't return null - continue using cache even for untranslated locales
}
const updatedAt = new Date(settings.updated_at);
if (isNaN(updatedAt.getTime())) {
console.debug('STOQ - Invalid updated_at date format in settings');
return null;
}
const
<
ttings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings || !settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {}));
delete settings.translations;
return settings;
}
console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`);
const translatedFields = translations[normalizedLocale];
if (translatedFields && typeof translatedFields === '