Changeset 3778798
- Timestamp:
- 11/02/2026 01:08:31 AM (78 minutes ago)
- Location:
- onetrace-for-woocommerce
- Files:
-
- 26 edited
- 1 copied
-
tags/1.15.0 (copied) (copied from onetrace-for-woocommerce/trunk )
-
tags/1.15.0/languages/onetrace-for-woocommerce-ru_RU.mo (modified) ( previous)
-
tags/1.15.0/languages/onetrace-for-woocommerce-ru_RU.po (modified) (33 diffs)
-
tags/1.15.0/languages/onetrace-for-woocommerce.pot (modified) (6 diffs)
-
tags/1.15.0/onetrace-woocommerce.php (modified) (2 diffs)
-
tags/1.15.0/readme.txt (modified) (4 diffs)
-
tags/1.15.0/src/Admin.php (modified) (4 diffs)
-
tags/1.15.0/src/Connection.php (modified) (2 diffs)
-
tags/1.15.0/src/Settings.php (modified) (4 diffs)
-
tags/1.15.0/src/Storefront.php (modified) (2 diffs)
-
tags/1.15.0/vendor/onetrace-php/src/Client.php (modified) (9 diffs)
-
tags/1.15.0/vendor/onetrace-php/src/Http/Requester.php (modified) (6 diffs)
-
tags/1.15.0/vendor/onetrace-php/src/Resource/Events.php (modified) (4 diffs)
-
tags/1.15.0/vendor/onetrace-php/src/Resource/Push.php (modified) (3 diffs)
-
trunk/languages/onetrace-for-woocommerce-ru_RU.mo (modified) ( previous)
-
trunk/languages/onetrace-for-woocommerce-ru_RU.po (modified) (33 diffs)
-
trunk/languages/onetrace-for-woocommerce.pot (modified) (6 diffs)
-
trunk/onetrace-woocommerce.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (4 diffs)
-
trunk/src/Admin.php (modified) (4 diffs)
-
trunk/src/Connection.php (modified) (2 diffs)
-
trunk/src/Settings.php (modified) (4 diffs)
-
trunk/src/Storefront.php (modified) (2 diffs)
-
trunk/vendor/onetrace-php/src/Client.php (modified) (9 diffs)
-
trunk/vendor/onetrace-php/src/Http/Requester.php (modified) (6 diffs)
-
trunk/vendor/onetrace-php/src/Resource/Events.php (modified) (4 diffs)
-
trunk/vendor/onetrace-php/src/Resource/Push.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
onetrace-for-woocommerce/tags/1.15.0/languages/onetrace-for-woocommerce-ru_RU.po
r3763672 r3778798 4 4 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/onetrace-for-" 5 5 "woocommerce\n" 6 "POT-Creation-Date: 2026-1 0-24T18:48:10+00:00\n"6 "POT-Creation-Date: 2026-11-02T00:39:09+00:00\n" 7 7 "PO-Revision-Date: 2026-10-08T17:53:43+00:00\n" 8 8 "Last-Translator: \n" … … 60 60 "настройки сохранятся." 61 61 62 #: src/Admin.php:4 5 src/Admin.php:277 src/Admin.php:36262 #: src/Admin.php:48 src/Admin.php:292 src/Admin.php:377 63 63 msgid "Settings" 64 64 msgstr "Настройки" 65 65 66 #: src/Admin.php:6 066 #: src/Admin.php:63 67 67 msgid "Set in wp-config.php." 68 68 msgstr "Задано в wp-config.php." 69 69 70 #: src/Admin.php:7 370 #: src/Admin.php:76 71 71 msgid "Connection" 72 72 msgstr "Подключение" 73 73 74 #: src/Admin.php:7 374 #: src/Admin.php:76 75 75 msgid "Keys are in the \"API keys\" section of your OneTrace project." 76 76 msgstr "Ключи — в разделе «Ключи API» вашего проекта OneTrace." 77 77 78 #: src/Admin.php:7 478 #: src/Admin.php:77 79 79 msgid "Platform address" 80 80 msgstr "Адрес платформы" 81 81 82 #: src/Admin.php:7 482 #: src/Admin.php:77 83 83 msgid "The address you open the platform at: the domain of your brand." 84 84 msgstr "Адрес, по которому вы открываете платформу: домен вашего бренда." 85 85 86 #: src/Admin.php:7 5 src/Admin.php:23186 #: src/Admin.php:78 src/Admin.php:246 87 87 msgid "Write key" 88 88 msgstr "Ключ записи" 89 89 90 #: src/Admin.php:7 590 #: src/Admin.php:78 91 91 msgid "For the tracker on the storefront." 92 92 msgstr "Для трекера на витрине." 93 93 94 #: src/Admin.php:7 6 src/Admin.php:23194 #: src/Admin.php:79 src/Admin.php:246 95 95 msgid "Secret key" 96 96 msgstr "Секретный ключ" 97 97 98 #: src/Admin.php:7 698 #: src/Admin.php:79 99 99 msgid "" 100 100 "For orders, customers and the catalog; needs the products.write permission." 101 101 msgstr "Для заказов, покупателей и каталога; нужно право products.write." 102 102 103 #: src/Admin.php:79 103 #: src/Admin.php:80 104 msgid "Identity key" 105 msgstr "Ключ подписи" 106 107 #: src/Admin.php:80 108 msgid "" 109 "Signs the id of the signed-in customer for the tracker, so OneTrace trusts " 110 "it when the project requires signed user ids. It is in OneTrace → Site → " 111 "Connection → Server." 112 msgstr "" 113 "Подписывает id вошедшего покупателя для трекера, и OneTrace принимает его, " 114 "когда в проекте включено «Требовать подпись». Ключ — в OneTrace → Сайт → " 115 "Подключение → Сервер." 116 117 #: src/Admin.php:83 104 118 msgid "What to send" 105 119 msgstr "Что передавать" 106 120 107 #: src/Admin.php:8 0121 #: src/Admin.php:84 108 122 msgid "Tracker" 109 123 msgstr "Трекер" 110 124 111 #: src/Admin.php:8 0125 #: src/Admin.php:84 112 126 msgid "Page and product views on the storefront" 113 127 msgstr "Просмотры страниц и товаров на витрине" 114 128 115 #: src/Admin.php:8 1129 #: src/Admin.php:85 116 130 msgid "Cookie consent" 117 131 msgstr "Согласие на cookie" 118 132 119 #: src/Admin.php:8 1133 #: src/Admin.php:85 120 134 msgid "" 121 135 "Load the tracker after the visitor agrees to statistics cookies (with a " … … 125 139 "плагином согласия, который поддерживает WP Consent API)" 126 140 127 #: src/Admin.php:8 2141 #: src/Admin.php:86 128 142 msgid "Orders" 129 143 msgstr "Заказы" 130 144 131 #: src/Admin.php:8 2145 #: src/Admin.php:86 132 146 msgid "" 133 147 "Placed, paid, shipped, delivered, cancelled and refunded orders with the " … … 137 151 "возвраты с данными покупателя" 138 152 139 #: src/Admin.php:8 3153 #: src/Admin.php:87 140 154 msgid "Cart" 141 155 msgstr "Корзина" 142 156 143 #: src/Admin.php:8 3157 #: src/Admin.php:87 144 158 msgid "" 145 159 "Adding to and removing from the cart, opening the checkout — for abandoned " … … 149 163 "брошенной корзины" 150 164 151 #: src/Admin.php:8 4165 #: src/Admin.php:88 152 166 msgid "Wishlist" 153 167 msgstr "Избранное" 154 168 155 #: src/Admin.php:8 4169 #: src/Admin.php:88 156 170 msgid "" 157 171 "Adding to and removing from the wishlist of YITH WooCommerce Wishlist or TI " … … 161 175 "WooCommerce Wishlist — для цепочек по избранному" 162 176 163 #: src/Admin.php:8 5177 #: src/Admin.php:89 164 178 msgid "Product catalog" 165 179 msgstr "Каталог товаров" 166 180 167 #: src/Admin.php:8 5181 #: src/Admin.php:89 168 182 msgid "" 169 183 "Products, categories and stock for recommendations, emails and catalog " … … 173 187 "при изменении товаров и остатков и раз в сутки" 174 188 175 #: src/Admin.php: 86189 #: src/Admin.php:90 176 190 msgid "Product id" 177 191 msgstr "ID товара" 178 192 179 #: src/Admin.php: 86193 #: src/Admin.php:90 180 194 msgid "Post ID" 181 195 msgstr "ID записи" 182 196 183 #: src/Admin.php: 86197 #: src/Admin.php:90 184 198 msgid "SKU (the post ID for products without a SKU)" 185 199 msgstr "Артикул (ID записи, если артикула нет)" 186 200 187 #: src/Admin.php: 86201 #: src/Admin.php:90 188 202 msgid "" 189 203 "Choose SKU if your OneTrace project already has the catalog and history " … … 193 207 "артикулам, например после переезда с другой платформы." 194 208 195 #: src/Admin.php: 89209 #: src/Admin.php:93 196 210 msgid "Newsletter consent" 197 211 msgstr "Согласие на рассылку" 198 212 199 #: src/Admin.php: 89213 #: src/Admin.php:93 200 214 msgid "" 201 215 "A checkbox subscribes the customer to marketing emails in OneTrace. Without " … … 205 219 "согласие не передаётся." 206 220 207 #: src/Admin.php:9 0221 #: src/Admin.php:94 208 222 msgid "Checkout" 209 223 msgstr "Оформление заказа" 210 224 211 #: src/Admin.php:9 0225 #: src/Admin.php:94 212 226 msgid "Checkbox at checkout (classic and block)" 213 227 msgstr "Галочка при оформлении заказа (классическом и блочном)" 214 228 215 #: src/Admin.php:9 1229 #: src/Admin.php:95 216 230 msgid "Registration" 217 231 msgstr "Регистрация" 218 232 219 #: src/Admin.php:9 1233 #: src/Admin.php:95 220 234 msgid "Checkbox in the registration form" 221 235 msgstr "Галочка в форме регистрации" 222 236 223 #: src/Admin.php:9 2237 #: src/Admin.php:96 224 238 msgid "Account" 225 239 msgstr "Личный кабинет" 226 240 227 #: src/Admin.php:9 2241 #: src/Admin.php:96 228 242 msgid "Subscribe and unsubscribe on the account details page" 229 243 msgstr "Подписка и отписка на странице данных аккаунта" 230 244 231 #: src/Admin.php:9 3245 #: src/Admin.php:97 232 246 msgid "Checkbox text" 233 247 msgstr "Текст галочки" 234 248 235 #: src/Admin.php:9 3 src/Settings.php:97249 #: src/Admin.php:97 src/Settings.php:102 236 250 msgid "Send me news and special offers by email" 237 251 msgstr "Присылать новости и специальные предложения по email" 238 252 239 #: src/Admin.php:9 4253 #: src/Admin.php:98 240 254 msgid "Subscription topic" 241 255 msgstr "Тема подписки" 242 256 243 #: src/Admin.php:9 4257 #: src/Admin.php:98 244 258 msgid "Empty — the whole email channel." 245 259 msgstr "Пусто — весь канал email." 246 260 247 #: src/Admin.php:9 5261 #: src/Admin.php:99 248 262 msgid "Newsletters in My account" 249 263 msgstr "Рассылки в личном кабинете" 250 264 251 #: src/Admin.php:9 5265 #: src/Admin.php:99 252 266 msgid "" 253 267 "My account → Newsletters: subscription topics by channel, frequency, a pause " … … 259 273 "profiles.read и profiles.write)" 260 274 261 #: src/Admin.php:9 5275 #: src/Admin.php:99 262 276 msgid "" 263 277 "Topics and their names are set up in OneTrace → Messaging rules → " … … 267 281 "подписки»." 268 282 269 #: src/Admin.php: 98283 #: src/Admin.php:102 270 284 msgid "Recommendations, search and Web Push" 271 285 msgstr "Рекомендации, поиск и Web Push" 272 286 273 #: src/Admin.php: 98287 #: src/Admin.php:102 274 288 msgid "" 275 289 "Widget ids are in the \"Site → Widgets\" section of the platform. Anywhere " … … 279 293 "другом месте используйте шорткод [onetrace_widget id=\"…\"]." 280 294 281 #: src/Admin.php: 99295 #: src/Admin.php:103 282 296 msgid "Widget on the product page" 283 297 msgstr "Виджет на странице товара" 284 298 285 #: src/Admin.php:10 0299 #: src/Admin.php:104 286 300 msgid "Widget in the cart" 287 301 msgstr "Виджет в корзине" 288 302 289 #: src/Admin.php:10 1303 #: src/Admin.php:105 290 304 msgid "Web Push" 291 305 msgstr "Web Push" 292 306 293 #: src/Admin.php:10 1307 #: src/Admin.php:105 294 308 msgid "" 295 309 "Serve /cdp-sw.js from the store root; put the [onetrace_push_button] " … … 299 313 "поставьте там, где посетители подписываются" 300 314 301 #: src/Admin.php:10 2315 #: src/Admin.php:106 302 316 msgid "Product search" 303 317 msgstr "Поиск по товарам" 304 318 305 #: src/Admin.php:10 2319 #: src/Admin.php:106 306 320 msgid "" 307 321 "Results of the store search and suggestions while typing come from OneTrace " … … 312 326 "товарам должен быть в тарифе проекта); при ошибке — обычный поиск WordPress" 313 327 314 #: src/Admin.php:10 3328 #: src/Admin.php:107 315 329 msgid "OneTrace search widget" 316 330 msgstr "Виджет поиска OneTrace" 317 331 318 #: src/Admin.php:10 3332 #: src/Admin.php:107 319 333 msgid "" 320 334 "The search page shows the results widget of OneTrace — facets, sorting, " … … 326 340 "полями поиска открывается слой поиска (нужен трекер)" 327 341 328 #: src/Admin.php:10 3342 #: src/Admin.php:107 329 343 msgid "" 330 344 "Turn the widget on and set up its look in OneTrace → Site → Search. While it " … … 334 348 "выключен или OneTrace недоступен, страница поиска остаётся прежней." 335 349 336 #: src/Admin.php:10 4350 #: src/Admin.php:108 337 351 msgid "Notify when available" 338 352 msgstr "Сообщить о поступлении" 339 353 340 #: src/Admin.php:10 4354 #: src/Admin.php:108 341 355 msgid "" 342 356 "Show the “Notify when available” form on the page of a product that is out " … … 345 359 "Показывать форму «Сообщить о поступлении» на странице товара не в наличии" 346 360 347 #: src/Admin.php:10 4361 #: src/Admin.php:108 348 362 msgid "" 349 363 "The form itself is set up in OneTrace → Site → Forms (kind “Notify when " … … 353 367 "поступлении»); без активной формы этого вида ничего не показывается." 354 368 355 #: src/Admin.php:10 5369 #: src/Admin.php:109 356 370 msgid "Ask AI about a product" 357 371 msgstr "Спросить ИИ о товаре" 358 372 359 #: src/Admin.php:10 5373 #: src/Admin.php:109 360 374 msgid "Show \"Ask AI about this product\" on product pages" 361 375 msgstr "Показывать «Спросить ИИ о товаре» на страницах товаров" 362 376 363 #: src/Admin.php:10 5377 #: src/Admin.php:109 364 378 msgid "" 365 379 "It appears only when the widget is turned on in OneTrace → Site → Product " … … 369 383 msgstr "" 370 384 "Появляется, только когда виджет включён в OneTrace → Сайт → Вопрос о товаре; " 371 "ИИ отвечает по описанию товара и базе знаний магазина. Чтобы поставить его "372 " вдругое место, выключите эту настройку и используйте шорткод [onetrace_ask]."373 374 #: src/Admin.php:1 08385 "ИИ отвечает по описанию товара и базе знаний магазина. Чтобы поставить его в " 386 "другое место, выключите эту настройку и используйте шорткод [onetrace_ask]." 387 388 #: src/Admin.php:112 375 389 msgid "Loyalty program" 376 390 msgstr "Программа лояльности" 377 391 378 #: src/Admin.php:1 08392 #: src/Admin.php:112 379 393 msgid "" 380 394 "The program is set up in the \"Loyalty\" section of the platform. Signed-in " … … 386 400 "видят баллы в «Мой аккаунт → Бонусные баллы»." 387 401 388 #: src/Admin.php:1 09src/LoyaltyAccount.php:73 src/LoyaltyBlocks.php:78402 #: src/Admin.php:113 src/LoyaltyAccount.php:73 src/LoyaltyBlocks.php:78 389 403 #: src/LoyaltyCart.php:52 src/LoyaltyCart.php:53 390 404 msgid "Bonus points" 391 405 msgstr "Бонусные баллы" 392 406 393 #: src/Admin.php:1 09407 #: src/Admin.php:113 394 408 msgid "" 395 409 "Show the balance and use points in the cart and at checkout (the secret key " … … 399 413 "ключу нужны права loyalty.read и loyalty.write)" 400 414 401 #: src/Admin.php:11 0415 #: src/Admin.php:114 402 416 msgid "Referrals" 403 417 msgstr "Приглашения" 404 418 405 #: src/Admin.php:11 0419 #: src/Admin.php:114 406 420 msgid "" 407 421 "The \"Friend's code\" field in the registration form. Without it the code of " … … 411 425 "ref=) всё равно засчитывается: трекер сохраняет его в cookie." 412 426 413 #: src/Admin.php:11 3427 #: src/Admin.php:117 414 428 msgid "Promo codes" 415 429 msgstr "Промокоды" 416 430 417 #: src/Admin.php:11 3431 #: src/Admin.php:117 418 432 msgid "" 419 433 "Unique codes of OneTrace promo code pools become WooCommerce coupons every 5 " … … 427 441 "привяжите его к ключу пула из раздела «Промокоды» платформы." 428 442 429 #: src/Admin.php:11 4443 #: src/Admin.php:118 430 444 msgid "Pools and template coupons" 431 445 msgstr "Пулы и купоны-образцы" 432 446 433 #: src/Admin.php:11 4447 #: src/Admin.php:118 434 448 msgid "" 435 449 "One per line: pool key = template coupon code. The secret key needs the " … … 439 453 "право promo.read." 440 454 441 #: src/Admin.php:1 17455 #: src/Admin.php:121 442 456 msgid "AI chat bot: store MCP" 443 457 msgstr "ИИ-бот чата: MCP магазина" 444 458 445 #: src/Admin.php:1 17459 #: src/Admin.php:121 446 460 msgid "" 447 461 "The AI bot of the OneTrace chat answers customers with live data of the " … … 455 469 "на email. Секретному ключу нужно право chats.manage." 456 470 457 #: src/Admin.php:1 18471 #: src/Admin.php:122 458 472 msgid "Store MCP server" 459 473 msgstr "MCP-сервер магазина" 460 474 461 #: src/Admin.php:1 18475 #: src/Admin.php:122 462 476 msgid "Connect the store to the AI chat bot" 463 477 msgstr "Подключить магазин к ИИ-боту чата" 464 478 465 #: src/Admin.php:1 19479 #: src/Admin.php:123 466 480 msgid "What the bot may do" 467 481 msgstr "Что разрешено боту" 468 482 469 #: src/Admin.php:1 19483 #: src/Admin.php:123 470 484 msgid "" 471 485 "Reading is safe; actions change orders and run only after the customer " … … 475 489 "покупателя в чате." 476 490 477 #: src/Admin.php:13 0491 #: src/Admin.php:134 478 492 msgid "Send a confirmation code" 479 493 msgstr "Отправлять код подтверждения" 480 494 481 #: src/Admin.php:13 1495 #: src/Admin.php:135 482 496 msgid "Check the confirmation code" 483 497 msgstr "Проверять код подтверждения" 484 498 485 #: src/Admin.php:13 2499 #: src/Admin.php:136 486 500 msgid "Read the confirmed customer" 487 501 msgstr "Читать подтверждённого покупателя" 488 502 489 #: src/Admin.php:13 3503 #: src/Admin.php:137 490 504 msgid "Read the customer's orders" 491 505 msgstr "Читать заказы покупателя" 492 506 493 #: src/Admin.php:13 4507 #: src/Admin.php:138 494 508 msgid "Read an order" 495 509 msgstr "Читать заказ" 496 510 497 #: src/Admin.php:13 5511 #: src/Admin.php:139 498 512 msgid "Read parcel tracking" 499 513 msgstr "Читать отслеживание посылки" 500 514 501 #: src/Admin.php:1 36515 #: src/Admin.php:140 502 516 msgid "Read stock and prices" 503 517 msgstr "Читать наличие и цены" 504 518 505 #: src/Admin.php:1 37519 #: src/Admin.php:141 506 520 msgid "Read delivery methods" 507 521 msgstr "Читать способы доставки" 508 522 509 #: src/Admin.php:1 38523 #: src/Admin.php:142 510 524 msgid "Read the return policy" 511 525 msgstr "Читать условия возврата" 512 526 513 #: src/Admin.php:1 39527 #: src/Admin.php:143 514 528 msgid "Action: cancel an unpaid order" 515 529 msgstr "Действие: отменять неоплаченный заказ" 516 530 517 #: src/Admin.php:14 0531 #: src/Admin.php:144 518 532 msgid "Action: pass a return request to the shop" 519 533 msgstr "Действие: передавать магазину заявку на возврат" 520 534 521 #: src/Admin.php:14 1535 #: src/Admin.php:145 522 536 msgid "Action: pass a delivery change request to the shop" 523 537 msgstr "Действие: передавать магазину запрос на изменение доставки" 524 538 525 #: src/Admin.php:1 55539 #: src/Admin.php:160 526 540 msgid "Saved — enter a new key to replace it" 527 541 msgstr "Сохранён — введите новый ключ, чтобы заменить" 528 542 529 543 #. translators: %s: project name 530 #: src/Admin.php:2 21544 #: src/Admin.php:236 531 545 #, php-format 532 546 msgid "Write key: project \"%s\"." … … 534 548 535 549 #. translators: %s: project name 536 #: src/Admin.php:2 23550 #: src/Admin.php:238 537 551 #, php-format 538 552 msgid "Secret key: project \"%s\"." 539 553 msgstr "Секретный ключ: проект «%s»." 540 554 541 #: src/Admin.php:2 25555 #: src/Admin.php:240 542 556 msgid "" 543 557 "The key has no products.write permission: the catalog will not be uploaded." 544 558 msgstr "У ключа нет права products.write: каталог не будет выгружаться." 545 559 546 #: src/Admin.php:2 26560 #: src/Admin.php:241 547 561 msgid "" 548 562 "The key has no loyalty.read and loyalty.write permissions: bonus points will " … … 552 566 "будут." 553 567 554 #: src/Admin.php:2 27568 #: src/Admin.php:242 555 569 msgid "" 556 570 "The key has no promo.read permission: promo codes will not become coupons." 557 571 msgstr "У ключа нет права promo.read: промокоды не станут купонами." 558 572 559 #: src/Admin.php:2 28573 #: src/Admin.php:243 560 574 msgid "" 561 575 "The key has no profiles.read and profiles.write permissions: the Newsletters " … … 565 579 "не будет." 566 580 567 #: src/Admin.php:2 36581 #: src/Admin.php:251 568 582 msgid "Enter the platform address and the keys first." 569 583 msgstr "Сначала укажите адрес платформы и ключи." 570 584 571 #: src/Admin.php:2 53585 #: src/Admin.php:268 572 586 msgid "The catalog upload has started; it runs in the background." 573 587 msgstr "Выгрузка каталога началась, она идёт в фоне." 574 588 575 #: src/Admin.php:2 75589 #: src/Admin.php:290 576 590 msgid "" 577 591 "OneTrace: sending is paused because the platform rejected the key. Check the " … … 581 595 "ключи и сохраните настройки." 582 596 583 #: src/Admin.php: 288597 #: src/Admin.php:303 584 598 msgid "Status" 585 599 msgstr "Состояние" 586 600 587 #: src/Admin.php: 291601 #: src/Admin.php:306 588 602 msgid "Queue" 589 603 msgstr "Очередь" 590 604 591 605 #. translators: 1: items waiting, 2: items waiting for a retry 592 #: src/Admin.php: 294606 #: src/Admin.php:309 593 607 #, php-format 594 608 msgid "%1$d waiting, %2$d of them after an error" 595 609 msgstr "Ждут отправки: %1$d, из них после ошибки: %2$d" 596 610 597 #: src/Admin.php:3 01611 #: src/Admin.php:316 598 612 msgid "Last error" 599 613 msgstr "Последняя ошибка" 600 614 601 #: src/Admin.php:3 09615 #: src/Admin.php:324 602 616 msgid "AI chat bot" 603 617 msgstr "ИИ-бот чата" 604 618 605 619 #. translators: %s: tools the bot uses 606 #: src/Admin.php:3 12620 #: src/Admin.php:327 607 621 #, php-format 608 622 msgid "Connected: %s" 609 623 msgstr "Подключён: %s" 610 624 611 #: src/Admin.php:3 18625 #: src/Admin.php:333 612 626 msgid "Test connection" 613 627 msgstr "Проверить подключение" 614 628 615 #: src/Admin.php:3 20629 #: src/Admin.php:335 616 630 msgid "Upload the whole catalog" 617 631 msgstr "Выгрузить весь каталог" 618 632 619 #: src/Admin.php:3 30633 #: src/Admin.php:345 620 634 msgid "Store emails" 621 635 msgstr "Письма магазина" 622 636 623 #: src/Admin.php:3 31637 #: src/Admin.php:346 624 638 msgid "" 625 639 "Emails of WooCommerce, WordPress and other plugins can go out through the " … … 638 652 "Письмо, которое OneTrace не принял, магазин отправляет сам." 639 653 640 #: src/Admin.php:3 40 src/Admin.php:343654 #: src/Admin.php:355 src/Admin.php:358 641 655 msgid "State" 642 656 msgstr "Состояние" 643 657 644 #: src/Admin.php:3 40658 #: src/Admin.php:355 645 659 msgid "Enter the platform address and the secret key." 646 660 msgstr "Укажите адрес платформы и секретный ключ." 647 661 648 #: src/Admin.php:3 43662 #: src/Admin.php:358 649 663 msgid "Not available — the store sends its emails itself." 650 664 msgstr "Недоступно — магазин отправляет письма сам." 651 665 652 #: src/Admin.php:3 46666 #: src/Admin.php:361 653 667 msgid "Order placed" 654 668 msgstr "Заказ оформлен" 655 669 656 #: src/Admin.php:3 47670 #: src/Admin.php:362 657 671 msgid "Order paid" 658 672 msgstr "Заказ оплачен" 659 673 660 #: src/Admin.php:3 48674 #: src/Admin.php:363 661 675 msgid "Order shipped" 662 676 msgstr "Заказ отправлен" 663 677 664 #: src/Admin.php:3 49678 #: src/Admin.php:364 665 679 msgid "Order delivered" 666 680 msgstr "Заказ доставлен" 667 681 668 #: src/Admin.php:3 50682 #: src/Admin.php:365 669 683 msgid "Order cancelled" 670 684 msgstr "Заказ отменён" 671 685 672 #: src/Admin.php:3 51686 #: src/Admin.php:366 673 687 msgid "Order refunded" 674 688 msgstr "Возврат по заказу" 675 689 676 #: src/Admin.php:3 55690 #: src/Admin.php:370 677 691 msgid "All store emails" 678 692 msgstr "Все письма магазина" 679 693 680 #: src/Admin.php:3 56694 #: src/Admin.php:371 681 695 msgid "" 682 696 "Through OneTrace: emails without a OneTrace template go out as the store " … … 686 700 "магазин" 687 701 688 #: src/Admin.php:3 57702 #: src/Admin.php:372 689 703 msgid "Sent by the store" 690 704 msgstr "Отправляет магазин" 691 705 692 #: src/Admin.php:3 58706 #: src/Admin.php:373 693 707 msgid "Order emails from OneTrace templates" 694 708 msgstr "Письма о заказе по шаблонам OneTrace" 695 709 696 #: src/Admin.php:3 58710 #: src/Admin.php:373 697 711 msgid "None" 698 712 msgstr "Нет" 699 713 700 #: src/Admin.php:3 63714 #: src/Admin.php:378 701 715 msgid "Store emails in OneTrace" 702 716 msgstr "Письма магазина в OneTrace" 703 717 704 #: src/Admin.php:3 64718 #: src/Admin.php:379 705 719 msgid "OneTrace → Store emails" 706 720 msgstr "OneTrace → Письма магазина" 707 721 708 #: src/Admin.php:4 08722 #: src/Admin.php:423 709 723 msgid "You are not allowed to do this." 710 724 msgstr "У вас нет прав на это действие." … … 999 1013 msgstr "(необязательно)" 1000 1014 1001 #: src/Storefront.php:29 31015 #: src/Storefront.php:295 1002 1016 msgid "Get notifications" 1003 1017 msgstr "Получать уведомления" -
onetrace-for-woocommerce/tags/1.15.0/languages/onetrace-for-woocommerce.pot
r3763672 r3778798 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: OneTrace for WooCommerce 1.1 4.0\n"5 "Project-Id-Version: OneTrace for WooCommerce 1.15.0\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/onetrace-for-woocommerce\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-1 0-24T18:48:10+00:00\n"12 "POT-Creation-Date: 2026-11-02T00:39:09+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 46 46 msgstr "" 47 47 48 #: src/Admin.php:4 549 #: src/Admin.php:2 7750 #: src/Admin.php:3 6248 #: src/Admin.php:48 49 #: src/Admin.php:292 50 #: src/Admin.php:377 51 51 msgid "Settings" 52 52 msgstr "" 53 53 54 #: src/Admin.php:6 054 #: src/Admin.php:63 55 55 msgid "Set in wp-config.php." 56 56 msgstr "" 57 57 58 #: src/Admin.php:7 358 #: src/Admin.php:76 59 59 msgid "Connection" 60 60 msgstr "" 61 61 62 #: src/Admin.php:7 362 #: src/Admin.php:76 63 63 msgid "Keys are in the \"API keys\" section of your OneTrace project." 64 64 msgstr "" 65 65 66 #: src/Admin.php:7 466 #: src/Admin.php:77 67 67 msgid "Platform address" 68 68 msgstr "" 69 69 70 #: src/Admin.php:7 470 #: src/Admin.php:77 71 71 msgid "The address you open the platform at: the domain of your brand." 72 72 msgstr "" 73 73 74 #: src/Admin.php:7 575 #: src/Admin.php:2 3174 #: src/Admin.php:78 75 #: src/Admin.php:246 76 76 msgid "Write key" 77 77 msgstr "" 78 78 79 #: src/Admin.php:7 579 #: src/Admin.php:78 80 80 msgid "For the tracker on the storefront." 81 81 msgstr "" 82 82 83 #: src/Admin.php:7 684 #: src/Admin.php:2 3183 #: src/Admin.php:79 84 #: src/Admin.php:246 85 85 msgid "Secret key" 86 86 msgstr "" 87 87 88 #: src/Admin.php:7 688 #: src/Admin.php:79 89 89 msgid "For orders, customers and the catalog; needs the products.write permission." 90 90 msgstr "" 91 91 92 #: src/Admin.php:79 92 #: src/Admin.php:80 93 msgid "Identity key" 94 msgstr "" 95 96 #: src/Admin.php:80 97 msgid "Signs the id of the signed-in customer for the tracker, so OneTrace trusts it when the project requires signed user ids. It is in OneTrace → Site → Connection → Server." 98 msgstr "" 99 100 #: src/Admin.php:83 93 101 msgid "What to send" 94 102 msgstr "" 95 103 96 #: src/Admin.php:8 0104 #: src/Admin.php:84 97 105 msgid "Tracker" 98 106 msgstr "" 99 107 100 #: src/Admin.php:8 0108 #: src/Admin.php:84 101 109 msgid "Page and product views on the storefront" 102 110 msgstr "" 103 111 104 #: src/Admin.php:8 1112 #: src/Admin.php:85 105 113 msgid "Cookie consent" 106 114 msgstr "" 107 115 108 #: src/Admin.php:8 1116 #: src/Admin.php:85 109 117 msgid "Load the tracker after the visitor agrees to statistics cookies (with a consent plugin that supports the WP Consent API)" 110 118 msgstr "" 111 119 112 #: src/Admin.php:8 2120 #: src/Admin.php:86 113 121 msgid "Orders" 114 122 msgstr "" 115 123 116 #: src/Admin.php:8 2124 #: src/Admin.php:86 117 125 msgid "Placed, paid, shipped, delivered, cancelled and refunded orders with the customer data" 118 126 msgstr "" 119 127 120 #: src/Admin.php:8 3128 #: src/Admin.php:87 121 129 msgid "Cart" 122 130 msgstr "" 123 131 124 #: src/Admin.php:8 3132 #: src/Admin.php:87 125 133 msgid "Adding to and removing from the cart, opening the checkout — for abandoned cart journeys" 126 134 msgstr "" 127 135 128 #: src/Admin.php:8 4136 #: src/Admin.php:88 129 137 msgid "Wishlist" 130 138 msgstr "" 131 139 132 #: src/Admin.php:8 4140 #: src/Admin.php:88 133 141 msgid "Adding to and removing from the wishlist of YITH WooCommerce Wishlist or TI WooCommerce Wishlist — for wishlist journeys" 134 142 msgstr "" 135 143 136 #: src/Admin.php:8 5144 #: src/Admin.php:89 137 145 msgid "Product catalog" 138 146 msgstr "" 139 147 140 #: src/Admin.php:8 5148 #: src/Admin.php:89 141 149 msgid "Products, categories and stock for recommendations, emails and catalog journeys, updated when products or their stock change and daily" 142 150 msgstr "" 143 151 144 #: src/Admin.php: 86152 #: src/Admin.php:90 145 153 msgid "Product id" 146 154 msgstr "" 147 155 148 #: src/Admin.php: 86156 #: src/Admin.php:90 149 157 msgid "Post ID" 150 158 msgstr "" 151 159 152 #: src/Admin.php: 86160 #: src/Admin.php:90 153 161 msgid "SKU (the post ID for products without a SKU)" 154 162 msgstr "" 155 163 156 #: src/Admin.php: 86164 #: src/Admin.php:90 157 165 msgid "Choose SKU if your OneTrace project already has the catalog and history under SKUs, e.g. after moving from another platform." 158 166 msgstr "" 159 167 160 #: src/Admin.php: 89168 #: src/Admin.php:93 161 169 msgid "Newsletter consent" 162 170 msgstr "" 163 171 164 #: src/Admin.php: 89172 #: src/Admin.php:93 165 173 msgid "A checkbox subscribes the customer to marketing emails in OneTrace. Without it no consent is sent." 166 174 msgstr "" 167 175 168 #: src/Admin.php:9 0176 #: src/Admin.php:94 169 177 msgid "Checkout" 170 178 msgstr "" 171 179 172 #: src/Admin.php:9 0180 #: src/Admin.php:94 173 181 msgid "Checkbox at checkout (classic and block)" 174 182 msgstr "" 175 183 176 #: src/Admin.php:9 1184 #: src/Admin.php:95 177 185 msgid "Registration" 178 186 msgstr "" 179 187 180 #: src/Admin.php:9 1188 #: src/Admin.php:95 181 189 msgid "Checkbox in the registration form" 182 190 msgstr "" 183 191 184 #: src/Admin.php:9 2192 #: src/Admin.php:96 185 193 msgid "Account" 186 194 msgstr "" 187 195 188 #: src/Admin.php:9 2196 #: src/Admin.php:96 189 197 msgid "Subscribe and unsubscribe on the account details page" 190 198 msgstr "" 191 199 192 #: src/Admin.php:9 3200 #: src/Admin.php:97 193 201 msgid "Checkbox text" 194 202 msgstr "" 195 203 196 #: src/Admin.php:9 3197 #: src/Settings.php: 97204 #: src/Admin.php:97 205 #: src/Settings.php:102 198 206 msgid "Send me news and special offers by email" 199 207 msgstr "" 200 208 201 #: src/Admin.php:9 4209 #: src/Admin.php:98 202 210 msgid "Subscription topic" 203 211 msgstr "" 204 212 205 #: src/Admin.php:9 4213 #: src/Admin.php:98 206 214 msgid "Empty — the whole email channel." 207 215 msgstr "" 208 216 209 #: src/Admin.php:9 5217 #: src/Admin.php:99 210 218 msgid "Newsletters in My account" 211 219 msgstr "" 212 220 213 #: src/Admin.php:9 5221 #: src/Admin.php:99 214 222 msgid "My account → Newsletters: subscription topics by channel, frequency, a pause and unsubscribing from everything, as in the OneTrace preference center (the secret key needs the profiles.read and profiles.write permissions)" 215 223 msgstr "" 216 224 217 #: src/Admin.php:9 5225 #: src/Admin.php:99 218 226 msgid "Topics and their names are set up in OneTrace → Messaging rules → Subscription topics." 219 227 msgstr "" 220 228 221 #: src/Admin.php: 98229 #: src/Admin.php:102 222 230 msgid "Recommendations, search and Web Push" 223 231 msgstr "" 224 232 225 #: src/Admin.php: 98233 #: src/Admin.php:102 226 234 msgid "Widget ids are in the \"Site → Widgets\" section of the platform. Anywhere else use the [onetrace_widget id=\"…\"] shortcode." 227 235 msgstr "" 228 236 229 #: src/Admin.php: 99237 #: src/Admin.php:103 230 238 msgid "Widget on the product page" 231 239 msgstr "" 232 240 233 #: src/Admin.php:10 0241 #: src/Admin.php:104 234 242 msgid "Widget in the cart" 235 243 msgstr "" 236 244 237 #: src/Admin.php:10 1245 #: src/Admin.php:105 238 246 msgid "Web Push" 239 247 msgstr "" 240 248 241 #: src/Admin.php:10 1249 #: src/Admin.php:105 242 250 msgid "Serve /cdp-sw.js from the store root; put the [onetrace_push_button] shortcode where visitors subscribe" 243 251 msgstr "" 244 252 245 #: src/Admin.php:10 2253 #: src/Admin.php:106 246 254 msgid "Product search" 247 255 msgstr "" 248 256 249 #: src/Admin.php:10 2257 #: src/Admin.php:106 250 258 msgid "Results of the store search and suggestions while typing come from OneTrace (the plan of the project must include product search); on an error — the usual WordPress search" 251 259 msgstr "" 252 260 253 #: src/Admin.php:10 3261 #: src/Admin.php:107 254 262 msgid "OneTrace search widget" 255 263 msgstr "" 256 264 257 #: src/Admin.php:10 3265 #: src/Admin.php:107 258 266 msgid "The search page shows the results widget of OneTrace — facets, sorting, infinite scroll and an \"Add to cart\" button — inside your theme, and a search layer opens under the search fields (needs the tracker)" 259 267 msgstr "" 260 268 261 #: src/Admin.php:10 3269 #: src/Admin.php:107 262 270 msgid "Turn the widget on and set up its look in OneTrace → Site → Search. While it is off there, or OneTrace is unavailable, the search page stays as it is." 263 271 msgstr "" 264 272 265 #: src/Admin.php:10 4273 #: src/Admin.php:108 266 274 msgid "Notify when available" 267 275 msgstr "" 268 276 269 #: src/Admin.php:10 4277 #: src/Admin.php:108 270 278 msgid "Show the “Notify when available” form on the page of a product that is out of stock" 271 279 msgstr "" 272 280 273 #: src/Admin.php:10 4281 #: src/Admin.php:108 274 282 msgid "The form itself is set up in OneTrace → Site → Forms (kind “Notify when available”); without an active form of this kind nothing is shown." 275 283 msgstr "" 276 284 277 #: src/Admin.php:10 5285 #: src/Admin.php:109 278 286 msgid "Ask AI about a product" 279 287 msgstr "" 280 288 281 #: src/Admin.php:10 5289 #: src/Admin.php:109 282 290 msgid "Show \"Ask AI about this product\" on product pages" 283 291 msgstr "" 284 292 285 #: src/Admin.php:10 5293 #: src/Admin.php:109 286 294 msgid "It appears only when the widget is turned on in OneTrace → Site → Product questions; the AI answers from the product description and the knowledge base of the store. To place it elsewhere, turn this off and use the [onetrace_ask] shortcode." 287 295 msgstr "" 288 296 289 #: src/Admin.php:1 08297 #: src/Admin.php:112 290 298 msgid "Loyalty program" 291 299 msgstr "" 292 300 293 #: src/Admin.php:1 08301 #: src/Admin.php:112 294 302 msgid "The program is set up in the \"Loyalty\" section of the platform. Signed-in customers pay for part of the order with points in the cart and at checkout and see their points in My account → Bonus points." 295 303 msgstr "" 296 304 297 #: src/Admin.php:1 09305 #: src/Admin.php:113 298 306 #: src/LoyaltyAccount.php:73 299 307 #: src/LoyaltyBlocks.php:78 … … 303 311 msgstr "" 304 312 305 #: src/Admin.php:1 09313 #: src/Admin.php:113 306 314 msgid "Show the balance and use points in the cart and at checkout (the secret key needs the loyalty.read and loyalty.write permissions)" 307 315 msgstr "" 308 316 309 #: src/Admin.php:11 0317 #: src/Admin.php:114 310 318 msgid "Referrals" 311 319 msgstr "" 312 320 313 #: src/Admin.php:11 0321 #: src/Admin.php:114 314 322 msgid "The \"Friend's code\" field in the registration form. Without it the code of a referral link (?ref=) still counts: the tracker keeps it in a cookie." 315 323 msgstr "" 316 324 317 #: src/Admin.php:11 3325 #: src/Admin.php:117 318 326 msgid "Promo codes" 319 327 msgstr "" 320 328 321 #: src/Admin.php:11 3329 #: src/Admin.php:117 322 330 msgid "Unique codes of OneTrace promo code pools become WooCommerce coupons every 5 minutes: with the discount, restrictions and expiry of a template coupon, one use each. Create the template coupon in Marketing → Coupons and bind it to the pool key from the \"Promo codes\" section of the platform." 323 331 msgstr "" 324 332 325 #: src/Admin.php:11 4333 #: src/Admin.php:118 326 334 msgid "Pools and template coupons" 327 335 msgstr "" 328 336 329 #: src/Admin.php:11 4337 #: src/Admin.php:118 330 338 msgid "One per line: pool key = template coupon code. The secret key needs the promo.read permission." 331 339 msgstr "" 332 340 333 #: src/Admin.php:1 17341 #: src/Admin.php:121 334 342 msgid "AI chat bot: store MCP" 335 343 msgstr "" 336 344 337 #: src/Admin.php:1 17345 #: src/Admin.php:121 338 346 msgid "The AI bot of the OneTrace chat answers customers with live data of the store and, if you allow it, acts on orders. Customers signed in on the website are confirmed automatically, others with a code the shop sends by email. The secret key needs the chats.manage permission." 339 347 msgstr "" 340 348 341 #: src/Admin.php:1 18349 #: src/Admin.php:122 342 350 msgid "Store MCP server" 343 351 msgstr "" 344 352 345 #: src/Admin.php:1 18353 #: src/Admin.php:122 346 354 msgid "Connect the store to the AI chat bot" 347 355 msgstr "" 348 356 349 #: src/Admin.php:1 19357 #: src/Admin.php:123 350 358 msgid "What the bot may do" 351 359 msgstr "" 352 360 353 #: src/Admin.php:1 19361 #: src/Admin.php:123 354 362 msgid "Reading is safe; actions change orders and run only after the customer agreed in the chat." 355 363 msgstr "" 356 364 357 #: src/Admin.php:13 0365 #: src/Admin.php:134 358 366 msgid "Send a confirmation code" 359 367 msgstr "" 360 368 361 #: src/Admin.php:13 1369 #: src/Admin.php:135 362 370 msgid "Check the confirmation code" 363 371 msgstr "" 364 372 365 #: src/Admin.php:13 2373 #: src/Admin.php:136 366 374 msgid "Read the confirmed customer" 367 375 msgstr "" 368 376 369 #: src/Admin.php:13 3377 #: src/Admin.php:137 370 378 msgid "Read the customer's orders" 371 379 msgstr "" 372 380 373 #: src/Admin.php:13 4381 #: src/Admin.php:138 374 382 msgid "Read an order" 375 383 msgstr "" 376 384 377 #: src/Admin.php:13 5385 #: src/Admin.php:139 378 386 msgid "Read parcel tracking" 379 387 msgstr "" 380 388 381 #: src/Admin.php:1 36389 #: src/Admin.php:140 382 390 msgid "Read stock and prices" 383 391 msgstr "" 384 392 385 #: src/Admin.php:1 37393 #: src/Admin.php:141 386 394 msgid "Read delivery methods" 387 395 msgstr "" 388 396 389 #: src/Admin.php:1 38397 #: src/Admin.php:142 390 398 msgid "Read the return policy" 391 399 msgstr "" 392 400 393 #: src/Admin.php:1 39401 #: src/Admin.php:143 394 402 msgid "Action: cancel an unpaid order" 395 403 msgstr "" 396 404 397 #: src/Admin.php:14 0405 #: src/Admin.php:144 398 406 msgid "Action: pass a return request to the shop" 399 407 msgstr "" 400 408 401 #: src/Admin.php:14 1409 #: src/Admin.php:145 402 410 msgid "Action: pass a delivery change request to the shop" 403 411 msgstr "" 404 412 405 #: src/Admin.php:1 55413 #: src/Admin.php:160 406 414 msgid "Saved — enter a new key to replace it" 407 415 msgstr "" 408 416 409 417 #. translators: %s: project name 410 #: src/Admin.php:2 21418 #: src/Admin.php:236 411 419 #, php-format 412 420 msgid "Write key: project \"%s\"." … … 414 422 415 423 #. translators: %s: project name 416 #: src/Admin.php:2 23424 #: src/Admin.php:238 417 425 #, php-format 418 426 msgid "Secret key: project \"%s\"." 419 427 msgstr "" 420 428 421 #: src/Admin.php:2 25429 #: src/Admin.php:240 422 430 msgid "The key has no products.write permission: the catalog will not be uploaded." 423 431 msgstr "" 424 432 425 #: src/Admin.php:2 26433 #: src/Admin.php:241 426 434 msgid "The key has no loyalty.read and loyalty.write permissions: bonus points will not work." 427 435 msgstr "" 428 436 429 #: src/Admin.php:2 27437 #: src/Admin.php:242 430 438 msgid "The key has no promo.read permission: promo codes will not become coupons." 431 439 msgstr "" 432 440 433 #: src/Admin.php:2 28441 #: src/Admin.php:243 434 442 msgid "The key has no profiles.read and profiles.write permissions: the Newsletters tab will not work." 435 443 msgstr "" 436 444 437 #: src/Admin.php:2 36445 #: src/Admin.php:251 438 446 msgid "Enter the platform address and the keys first." 439 447 msgstr "" 440 448 441 #: src/Admin.php:2 53449 #: src/Admin.php:268 442 450 msgid "The catalog upload has started; it runs in the background." 443 451 msgstr "" 444 452 445 #: src/Admin.php:2 75453 #: src/Admin.php:290 446 454 msgid "OneTrace: sending is paused because the platform rejected the key. Check the keys and save the settings." 447 455 msgstr "" 448 456 449 #: src/Admin.php: 288457 #: src/Admin.php:303 450 458 msgid "Status" 451 459 msgstr "" 452 460 453 #: src/Admin.php: 291461 #: src/Admin.php:306 454 462 msgid "Queue" 455 463 msgstr "" 456 464 457 465 #. translators: 1: items waiting, 2: items waiting for a retry 458 #: src/Admin.php: 294466 #: src/Admin.php:309 459 467 #, php-format 460 468 msgid "%1$d waiting, %2$d of them after an error" 461 469 msgstr "" 462 470 463 #: src/Admin.php:3 01471 #: src/Admin.php:316 464 472 msgid "Last error" 465 473 msgstr "" 466 474 467 #: src/Admin.php:3 09475 #: src/Admin.php:324 468 476 msgid "AI chat bot" 469 477 msgstr "" 470 478 471 479 #. translators: %s: tools the bot uses 472 #: src/Admin.php:3 12480 #: src/Admin.php:327 473 481 #, php-format 474 482 msgid "Connected: %s" 475 483 msgstr "" 476 484 477 #: src/Admin.php:3 18485 #: src/Admin.php:333 478 486 msgid "Test connection" 479 487 msgstr "" 480 488 481 #: src/Admin.php:3 20489 #: src/Admin.php:335 482 490 msgid "Upload the whole catalog" 483 491 msgstr "" 484 492 485 #: src/Admin.php:3 30493 #: src/Admin.php:345 486 494 msgid "Store emails" 487 495 msgstr "" 488 496 489 #: src/Admin.php:3 31497 #: src/Admin.php:346 490 498 msgid "Emails of WooCommerce, WordPress and other plugins can go out through the email integration of your OneTrace project, with delivery statuses and history in the customer profile; order emails — from OneTrace templates in the customer's language. This is set up in the \"Store emails\" section of the platform; the secret key needs the \"Send messages manually\" permission (messages.send). An email OneTrace does not accept is sent by the store itself." 491 499 msgstr "" 492 500 493 #: src/Admin.php:3 40494 #: src/Admin.php:3 43501 #: src/Admin.php:355 502 #: src/Admin.php:358 495 503 msgid "State" 496 504 msgstr "" 497 505 498 #: src/Admin.php:3 40506 #: src/Admin.php:355 499 507 msgid "Enter the platform address and the secret key." 500 508 msgstr "" 501 509 502 #: src/Admin.php:3 43510 #: src/Admin.php:358 503 511 msgid "Not available — the store sends its emails itself." 504 512 msgstr "" 505 513 506 #: src/Admin.php:3 46514 #: src/Admin.php:361 507 515 msgid "Order placed" 508 516 msgstr "" 509 517 510 #: src/Admin.php:3 47518 #: src/Admin.php:362 511 519 msgid "Order paid" 512 520 msgstr "" 513 521 514 #: src/Admin.php:3 48522 #: src/Admin.php:363 515 523 msgid "Order shipped" 516 524 msgstr "" 517 525 518 #: src/Admin.php:3 49526 #: src/Admin.php:364 519 527 msgid "Order delivered" 520 528 msgstr "" 521 529 522 #: src/Admin.php:3 50530 #: src/Admin.php:365 523 531 msgid "Order cancelled" 524 532 msgstr "" 525 533 526 #: src/Admin.php:3 51534 #: src/Admin.php:366 527 535 msgid "Order refunded" 528 536 msgstr "" 529 537 530 #: src/Admin.php:3 55538 #: src/Admin.php:370 531 539 msgid "All store emails" 532 540 msgstr "" 533 541 534 #: src/Admin.php:3 56542 #: src/Admin.php:371 535 543 msgid "Through OneTrace: emails without a OneTrace template go out as the store makes them" 536 544 msgstr "" 537 545 538 #: src/Admin.php:3 57546 #: src/Admin.php:372 539 547 msgid "Sent by the store" 540 548 msgstr "" 541 549 542 #: src/Admin.php:3 58550 #: src/Admin.php:373 543 551 msgid "Order emails from OneTrace templates" 544 552 msgstr "" 545 553 546 #: src/Admin.php:3 58554 #: src/Admin.php:373 547 555 msgid "None" 548 556 msgstr "" 549 557 550 #: src/Admin.php:3 63558 #: src/Admin.php:378 551 559 msgid "Store emails in OneTrace" 552 560 msgstr "" 553 561 554 #: src/Admin.php:3 64562 #: src/Admin.php:379 555 563 msgid "OneTrace → Store emails" 556 564 msgstr "" 557 565 558 #: src/Admin.php:4 08566 #: src/Admin.php:423 559 567 msgid "You are not allowed to do this." 560 568 msgstr "" … … 843 851 msgstr "" 844 852 845 #: src/Storefront.php:29 3853 #: src/Storefront.php:295 846 854 msgid "Get notifications" 847 855 msgstr "" -
onetrace-for-woocommerce/tags/1.15.0/onetrace-woocommerce.php
r3763672 r3778798 4 4 * Plugin URI: https://wordpress.org/plugins/onetrace-for-woocommerce/ 5 5 * Description: Connects the store to OneTrace.pro, the customer data platform: orders, customers and consents from the server, the website tracker, the product catalog with stock, wishlists, recommendation widgets, Web Push and the store's emails through OneTrace. 6 * Version: 1.1 4.06 * Version: 1.15.0 7 7 * Requires at least: 6.6 8 8 * Requires PHP: 7.4 … … 43 43 } 44 44 45 define('ONETRACE_WC_VERSION', '1.1 4.0');45 define('ONETRACE_WC_VERSION', '1.15.0'); 46 46 define('ONETRACE_WC_FILE', __FILE__); 47 47 -
onetrace-for-woocommerce/tags/1.15.0/readme.txt
r3763672 r3778798 7 7 WC requires at least: 9.0 8 8 WC tested up to: 11.2 9 Stable tag: 1.1 4.09 Stable tag: 1.15.0 10 10 License: GPLv2 or later 11 11 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 47 47 2. In your OneTrace project create a write key and a secret key with the products.write permission (API keys section). 48 48 3. Go to WooCommerce → Settings → OneTrace, enter the platform address and both keys, click "Test connection". 49 4. Optionally enter the identity key from Site → Connection → Server of the project: the id of the signed-in customer reaches the tracker signed, and the project can require signed user ids. 49 50 50 51 == Frequently Asked Questions == … … 95 96 == Changelog == 96 97 98 = 1.15.0 = 99 * Signed user ids: the "Identity key" setting (or the ONETRACE_IDENTITY_KEY constant) signs the id of the signed-in customer for the OneTrace tracker, so the project can turn on "Require signature" and no visitor can link their browser to someone else's profile. 100 97 101 = 1.14.0 = 98 102 * "Ask AI about this product": the product page gets the place of the OneTrace widget after the add to cart area (classic and block themes; setting "Ask AI about a product", on by default) — it shows only when the widget is turned on in OneTrace → Site → Product questions. The `[onetrace_ask]` shortcode puts it anywhere. … … 172 176 == Upgrade Notice == 173 177 178 = 1.15.0 = 179 The "Identity key" setting: signed user ids for projects that require them. 180 174 181 = 1.14.0 = 175 182 "Ask AI about this product" on product pages and product descriptions in the catalog. -
onetrace-for-woocommerce/tags/1.15.0/src/Admin.php
r3763672 r3778798 13 13 public const TAB = 'onetrace'; 14 14 15 /** Password fields that are never printed back, with their placeholders. */ 16 private const HIDDEN_KEYS = ['secret_key' => 'cdp_sk_…', 'identity_key' => 'cdp_ik_…']; 17 15 18 public static function register(): void 16 19 { … … 75 78 $field('write_key', ['type' => 'text', 'title' => __('Write key', 'onetrace-for-woocommerce'), 'placeholder' => 'cdp_wk_…', 'desc_tip' => __('For the tracker on the storefront.', 'onetrace-for-woocommerce')]), 76 79 $field('secret_key', ['type' => 'password', 'title' => __('Secret key', 'onetrace-for-woocommerce'), 'placeholder' => 'cdp_sk_…', 'desc_tip' => __('For orders, customers and the catalog; needs the products.write permission.', 'onetrace-for-woocommerce')]), 80 $field('identity_key', ['type' => 'password', 'title' => __('Identity key', 'onetrace-for-woocommerce'), 'placeholder' => 'cdp_ik_…', 'desc_tip' => __('Signs the id of the signed-in customer for the tracker, so OneTrace trusts it when the project requires signed user ids. It is in OneTrace → Site → Connection → Server.', 'onetrace-for-woocommerce')]), 77 81 ['type' => 'sectionend', 'id' => 'onetrace_connection'], 78 82 … … 151 155 } 152 156 153 // The secret key is never printed back: an empty field keeps the stored one. 154 if (($field['id'] ?? '') === Settings::OPTION . '[secret_key]') { 155 $field['placeholder'] = (string) $field['value'] !== '' ? __('Saved — enter a new key to replace it', 'onetrace-for-woocommerce') : 'cdp_sk_…'; 156 $field['value'] = ''; 157 // The secret and identity keys are never printed back: an empty field keeps the stored one. 158 foreach (self::HIDDEN_KEYS as $key => $placeholder) { 159 if (($field['id'] ?? '') === Settings::OPTION . '[' . $key . ']') { 160 $field['placeholder'] = (string) $field['value'] !== '' ? __('Saved — enter a new key to replace it', 'onetrace-for-woocommerce') : $placeholder; 161 $field['value'] = ''; 162 } 157 163 } 158 164 … … 170 176 $settings = get_option(Settings::OPTION, []); 171 177 172 // An empty password field keeps the stored secret key. 173 if (\is_array($settings) && \is_array($previous) && ($settings['secret_key'] ?? '') === '' && ($previous['secret_key'] ?? '') !== '') { 174 $settings['secret_key'] = $previous['secret_key']; 175 update_option(Settings::OPTION, $settings); 178 // An empty password field keeps the stored key. 179 if (\is_array($settings) && \is_array($previous)) { 180 $kept = $settings; 181 182 foreach (array_keys(self::HIDDEN_KEYS) as $key) { 183 if (($settings[$key] ?? '') === '' && ($previous[$key] ?? '') !== '') { 184 $kept[$key] = $previous[$key]; 185 } 186 } 187 188 if ($kept !== $settings) { 189 update_option(Settings::OPTION, $kept); 190 } 176 191 } 177 192 -
onetrace-for-woocommerce/tags/1.15.0/src/Connection.php
r3755877 r3778798 30 30 $options = [ 31 31 $write ? 'write_key' : 'secret_key' => (string) Settings::get($write ? 'write_key' : 'secret_key') ?: null, 32 'identity_key' => (string) Settings::get('identity_key') ?: null, 32 33 'timeout' => $timeouts[0], 33 34 'connect_timeout' => $timeouts[1], … … 47 48 48 49 return self::$clients[$key]; 50 } 51 52 /** 53 * The signature of the signed-in customer's id for the tracker (identity key); null without the key. 54 */ 55 public static function userHash(string $userId): ?string 56 { 57 return $userId !== '' && (string) Settings::get('identity_key') !== '' ? self::client('write')->userHash($userId) : null; 49 58 } 50 59 -
onetrace-for-woocommerce/tags/1.15.0/src/Settings.php
r3763672 r3778798 7 7 /** 8 8 * Plugin settings: the option "onetrace_settings", the keys may also come from wp-config.php constants 9 * ONETRACE_URL, ONETRACE_WRITE_KEY and ONETRACE_SECRET_KEY (then they are not stored in the database). 9 * ONETRACE_URL, ONETRACE_WRITE_KEY, ONETRACE_SECRET_KEY and ONETRACE_IDENTITY_KEY (then they are not stored in the 10 * database). 10 11 */ 11 12 final class Settings 12 13 { 13 14 public const OPTION = 'onetrace_settings'; 15 16 /** Settings that may come from wp-config.php constants. */ 17 private const CONSTANTS = ['url' => 'ONETRACE_URL', 'write_key' => 'ONETRACE_WRITE_KEY', 'secret_key' => 'ONETRACE_SECRET_KEY', 'identity_key' => 'ONETRACE_IDENTITY_KEY']; 14 18 15 19 /** @var array<string, mixed> */ … … 18 22 'write_key' => '', 19 23 'secret_key' => '', 24 'identity_key' => '', 20 25 'tracker' => 'yes', 21 26 'wait_for_consent' => 'yes', … … 50 55 public static function get(string $key) 51 56 { 52 $constant = ['url' => 'ONETRACE_URL', 'write_key' => 'ONETRACE_WRITE_KEY', 'secret_key' => 'ONETRACE_SECRET_KEY'][$key] ?? null;57 $constant = self::CONSTANTS[$key] ?? null; 53 58 54 59 if ($constant !== null && \defined($constant) && \is_string(\constant($constant)) && \constant($constant) !== '') { … … 68 73 public static function fromConstant(string $key): bool 69 74 { 70 $constant = ['url' => 'ONETRACE_URL', 'write_key' => 'ONETRACE_WRITE_KEY', 'secret_key' => 'ONETRACE_SECRET_KEY'][$key] ?? null;75 $constant = self::CONSTANTS[$key] ?? null; 71 76 72 77 return $constant !== null && \defined($constant); -
onetrace-for-woocommerce/tags/1.15.0/src/Storefront.php
r3763672 r3778798 79 79 . "(function(d,u,s,load){load=function(){if(s)return;s=d.createElement('script');s.async=1;s.src=u;d.head.appendChild(s)};%s})(document,%s);\n" 80 80 . "cdp.init(%s, %s);\ncdp.page();\n" 81 // The browser follows the signed-in customer: identify after login, reset after logout. 82 . "(function(u,k){try{k=localStorage.getItem('cdp_uid')}catch(e){}if(u&&k!==u)cdp.identify(u);else if(!u&&k)cdp.reset()})(%s);", 81 // The browser follows the signed-in customer: identify after login (and with a new signature of the id), 82 // reset after logout. 83 . "(function(u,h,k,g){try{k=localStorage.getItem('cdp_uid');g=localStorage.getItem('cdp_uhash')}catch(e){}if(u&&(k!==u||h&&g!==h))cdp.identify(u,{},h?{userHash:h}:{});else if(!u&&k)cdp.reset()})(%s,%s);", 83 84 wp_json_encode(self::STUB_METHODS), 84 85 $waits … … 88 89 wp_json_encode((string) Settings::get('write_key')), 89 90 wp_json_encode($options, JSON_UNESCAPED_SLASHES), 90 wp_json_encode($userId) 91 wp_json_encode($userId), 92 wp_json_encode(Connection::userHash($userId)) 91 93 ); 92 94 -
onetrace-for-woocommerce/tags/1.15.0/vendor/onetrace-php/src/Client.php
r3763672 r3778798 36 36 * 37 37 * $client = new OneTrace\WooCommerce\Vendor\OneTrace\Client('https://cdp.onetrace.pro', [ 38 * 'write_key' => getenv('ONETRACE_WRITE_KEY'), // events 39 * 'secret_key' => getenv('ONETRACE_SECRET_KEY'), // everything else 38 * 'write_key' => getenv('ONETRACE_WRITE_KEY'), // recommendations, widgets, search 39 * 'secret_key' => getenv('ONETRACE_SECRET_KEY'), // events and everything else 40 * 'identity_key' => getenv('ONETRACE_IDENTITY_KEY'), // signs user ids for the tracker 40 41 * ]); 41 42 * $client->events()->track(['userId' => '42', 'event' => 'order_completed', 'properties' => ['amount' => 9980]]); 43 * $hash = $client->userHash('42'); // cdp.identify('42', {}, { userHash: hash }) on the page 42 44 * 43 45 * The address is the platform domain of your account (a white-label brand has its own); "/api/v1" is added … … 46 48 final class Client 47 49 { 48 public const VERSION = '1.1 6.0';50 public const VERSION = '1.17.0'; 49 51 50 52 /** … … 174 176 * write_key?: string|null, 175 177 * secret_key?: string|null, 178 * identity_key?: string|null, 176 179 * timeout?: float, 177 180 * connect_timeout?: float, … … 186 189 * sleep?: callable(float): void, 187 190 * } $options 188 * - write_key: cdp_wk_… for events, recommendations, widgets, product search and Web Push; 189 * - secret_key: cdp_sk_… for everything (never expose it to browsers); 191 * - write_key: cdp_wk_… for recommendations, widgets, product search and Web Push, events when there is no 192 * secret key; 193 * - secret_key: cdp_sk_… for everything, events included (never expose it to browsers); 194 * - identity_key: cdp_ik_…, the identity key of the project (Website → Connection → Server) for userHash() 195 * and signed user ids of events sent with the write key (never expose it to browsers); 190 196 * - timeout / connect_timeout: seconds for the built-in cURL transport (10 and 5 by default); 191 197 * - max_retries: retries of network errors, 429, 5xx (3 by default, 0 disables); … … 214 220 throw new \InvalidArgumentException('Pass "write_key", "secret_key" or both.'); 215 221 } 222 223 $identityKey = self::key($options['identity_key'] ?? null, 'The identity key must be a string.'); 216 224 217 225 $userAgent = sprintf('onetrace-php/%s PHP/%s', self::VERSION, PHP_VERSION); … … 230 238 $userAgent, 231 239 $options['sleep'] ?? null, 232 isset($options['language']) && $options['language'] !== '' ? $options['language'] : 'en' 240 isset($options['language']) && $options['language'] !== '' ? $options['language'] : 'en', 241 $identityKey 233 242 ); 234 243 } … … 388 397 /** @var array{type: string, name: string, project: array<string, mixed>, scopes: list<string>} */ 389 398 return $this->requester->request('GET', '/key', ['auth' => $key === 'write' ? Requester::AUTH_WRITE : Requester::AUTH_SECRET]); 399 } 400 401 /** 402 * The signature of a signed-in user's id for the tracker: HMAC-SHA256 of the id with the identity key, hex. 403 * Print it into the page — cdp.identify(userId, traits, { userHash }) — so that the platform trusts the user id 404 * of the browser (required when the project turns on "Require signature"). Null when the client has no 405 * "identity_key". 406 * 407 * @param string|int $userId 408 */ 409 public function userHash($userId): ?string 410 { 411 $userId = (string) $userId; 412 413 return $userId === '' ? null : $this->requester->userHash($userId); 390 414 } 391 415 … … 470 494 * @param mixed $key 471 495 */ 472 private static function key($key ): ?string496 private static function key($key, string $error = 'API keys must be strings.'): ?string 473 497 { 474 498 if ($key === null || $key === false || $key === '') { … … 477 501 478 502 if (!\is_string($key)) { 479 throw new \InvalidArgumentException('API keys must be strings.'); 480 } 481 482 return trim($key); 503 throw new \InvalidArgumentException($error); 504 } 505 506 $key = trim($key); 507 508 return $key === '' ? null : $key; 483 509 } 484 510 } -
onetrace-for-woocommerce/tags/1.15.0/vendor/onetrace-php/src/Http/Requester.php
r3761605 r3778798 24 24 public const AUTH_WRITE = 'write'; 25 25 public const AUTH_SECRET = 'secret'; 26 /** The secret key, or the write key when there is no secret key: events sent by a server. */ 27 public const AUTH_SERVER = 'server'; 26 28 27 29 private const MAX_RETRY_AFTER = 60.0; … … 32 34 33 35 private ?string $secretKey; 36 37 private ?string $identityKey; 34 38 35 39 private Transport $transport; … … 58 62 string $userAgent, 59 63 ?callable $sleep = null, 60 string $language = 'en' 64 string $language = 'en', 65 ?string $identityKey = null 61 66 ) { 62 67 $this->baseUrl = $baseUrl; 63 68 $this->writeKey = $writeKey; 64 69 $this->secretKey = $secretKey; 70 $this->identityKey = $identityKey; 65 71 $this->transport = $transport; 66 72 $this->maxRetries = max(0, $maxRetries); … … 80 86 * idempotent?: bool, 81 87 * idempotency_key?: string|null, 82 * } $options auth: AUTH_WRITE accepts either key (write key preferred), AUTH_SECRET needs the secret key; 88 * } $options auth: AUTH_WRITE accepts either key (write key preferred), AUTH_SERVER — either key (secret key 89 * preferred), AUTH_SECRET needs the secret key; 83 90 * idempotent: send an Idempotency-Key header (generated unless given) 84 91 * … … 128 135 { 129 136 return $this->baseUrl; 137 } 138 139 /** 140 * Whether a request with this auth goes with the write key. 141 */ 142 public function usesWriteKey(string $auth): bool 143 { 144 return $this->writeKey !== null && ($auth === self::AUTH_WRITE || $this->secretKey === null); 145 } 146 147 /** 148 * The signature of a user id: HMAC-SHA256 with the identity key, hex; null without the identity key. 149 */ 150 public function userHash(string $userId): ?string 151 { 152 return $this->identityKey === null ? null : hash_hmac('sha256', $userId, $this->identityKey); 130 153 } 131 154 … … 192 215 } 193 216 194 throw new ConfigurationException($auth === self::AUTH_WRITE 217 if ($auth === self::AUTH_SERVER && $this->writeKey !== null) { 218 return $this->writeKey; 219 } 220 221 throw new ConfigurationException($auth !== self::AUTH_SECRET 195 222 ? 'Pass "write_key" or "secret_key" to the client to send events.' 196 223 : 'This method needs a secret key: pass "secret_key" to the client.'); -
onetrace-for-woocommerce/tags/1.15.0/vendor/onetrace-php/src/Resource/Events.php
r3738426 r3778798 12 12 13 13 /** 14 * Event ingestion: track, identify, page, alias and batches. Works with a write key or a secret key. 14 * Event ingestion: track, identify, page, alias and batches. Works with a secret key or a write key; the secret key 15 * is used when both are given (events of the write key do not award loyalty points, and their userId is dropped when 16 * the project requires signed user ids). With only the write key, messages with a userId get its "userHash" 17 * signature from the client's identity key. 15 18 * 16 19 * Each message gets a messageId (repeats with the same id within 24 hours are dropped by the server, so retries … … 128 131 $result = ['accepted' => 0, 'duplicates' => 0]; 129 132 130 foreach (self::chunks($ messages) as $chunk) {133 foreach (self::chunks($this->sign($messages)) as $chunk) { 131 134 $response = $this->requester->request('POST', '/batch', ['auth' => self::auth($chunk), 'json' => ['batch' => $chunk]]); 132 135 $result['accepted'] += self::count($response['accepted'] ?? 0); … … 201 204 private function send(string $type, array $message): array 202 205 { 203 return $this->requester->request('POST', '/' . $type, ['auth' => self::auth([$message]), 'json' => self::prepare($type, $message)]);204 } 205 206 /** 207 * Consents in identify are accepted only with the secret key; other messages prefer the write key.206 return $this->requester->request('POST', '/' . $type, ['auth' => self::auth([$message]), 'json' => $this->sign([self::prepare($type, $message)])[0]]); 207 } 208 209 /** 210 * Consents in identify are accepted only with the secret key; other messages prefer it too. 208 211 * 209 212 * @param array<array<string, mixed>> $messages … … 217 220 } 218 221 219 return Requester::AUTH_WRITE; 222 return Requester::AUTH_SERVER; 223 } 224 225 /** 226 * Adds "userHash" to messages with a userId when they go with the write key and the identity key is set. 227 * 228 * @param list<array<string, mixed>> $messages 229 * 230 * @return list<array<string, mixed>> 231 */ 232 private function sign(array $messages): array 233 { 234 if (!$this->requester->usesWriteKey(Requester::AUTH_SERVER)) { 235 return $messages; 236 } 237 238 foreach ($messages as $index => $message) { 239 $userId = $message['userId'] ?? null; 240 241 if ((\is_string($userId) || \is_int($userId)) && (string) $userId !== '' && !isset($message['userHash'])) { 242 $hash = $this->requester->userHash((string) $userId); 243 244 if ($hash === null) { 245 return $messages; 246 } 247 248 $messages[$index]['userHash'] = $hash; 249 } 250 } 251 252 return $messages; 220 253 } 221 254 -
onetrace-for-woocommerce/tags/1.15.0/vendor/onetrace-php/src/Resource/Push.php
r3738426 r3778798 9 9 /** 10 10 * Web Push subscriptions collected outside of the JS tracker (for example in a native wrapper). 11 * Works with a write key or a secret key. 11 * Works with a write key or a secret key; with the write key a userId gets its "userHash" signature from the 12 * client's identity key. 12 13 */ 13 14 final class Push extends Resource … … 26 27 * Stores a browser subscription (PushSubscription.toJSON()) and links it to the visitor. 27 28 * 28 * @param array<string, mixed> $subscription endpoint and keys29 * @param array{anonymousId?: string, userId?: string, publicKey?: string} $params29 * @param array<string, mixed> $subscription endpoint and keys 30 * @param array{anonymousId?: string, userId?: string, userHash?: string, publicKey?: string} $params 30 31 * 31 32 * @return array<string, mixed> subscription_id … … 33 34 public function subscribe(array $subscription, array $params = []): array 34 35 { 36 if (isset($params['userId']) && $params['userId'] !== '' && !isset($params['userHash']) && $this->requester->usesWriteKey(Requester::AUTH_WRITE)) { 37 $hash = $this->requester->userHash($params['userId']); 38 39 if ($hash !== null) { 40 $params['userHash'] = $hash; 41 } 42 } 43 35 44 return $this->requester->request('POST', '/push/subscriptions', [ 36 45 'auth' => Requester::AUTH_WRITE, -
onetrace-for-woocommerce/trunk/languages/onetrace-for-woocommerce-ru_RU.po
r3763672 r3778798 4 4 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/onetrace-for-" 5 5 "woocommerce\n" 6 "POT-Creation-Date: 2026-1 0-24T18:48:10+00:00\n"6 "POT-Creation-Date: 2026-11-02T00:39:09+00:00\n" 7 7 "PO-Revision-Date: 2026-10-08T17:53:43+00:00\n" 8 8 "Last-Translator: \n" … … 60 60 "настройки сохранятся." 61 61 62 #: src/Admin.php:4 5 src/Admin.php:277 src/Admin.php:36262 #: src/Admin.php:48 src/Admin.php:292 src/Admin.php:377 63 63 msgid "Settings" 64 64 msgstr "Настройки" 65 65 66 #: src/Admin.php:6 066 #: src/Admin.php:63 67 67 msgid "Set in wp-config.php." 68 68 msgstr "Задано в wp-config.php." 69 69 70 #: src/Admin.php:7 370 #: src/Admin.php:76 71 71 msgid "Connection" 72 72 msgstr "Подключение" 73 73 74 #: src/Admin.php:7 374 #: src/Admin.php:76 75 75 msgid "Keys are in the \"API keys\" section of your OneTrace project." 76 76 msgstr "Ключи — в разделе «Ключи API» вашего проекта OneTrace." 77 77 78 #: src/Admin.php:7 478 #: src/Admin.php:77 79 79 msgid "Platform address" 80 80 msgstr "Адрес платформы" 81 81 82 #: src/Admin.php:7 482 #: src/Admin.php:77 83 83 msgid "The address you open the platform at: the domain of your brand." 84 84 msgstr "Адрес, по которому вы открываете платформу: домен вашего бренда." 85 85 86 #: src/Admin.php:7 5 src/Admin.php:23186 #: src/Admin.php:78 src/Admin.php:246 87 87 msgid "Write key" 88 88 msgstr "Ключ записи" 89 89 90 #: src/Admin.php:7 590 #: src/Admin.php:78 91 91 msgid "For the tracker on the storefront." 92 92 msgstr "Для трекера на витрине." 93 93 94 #: src/Admin.php:7 6 src/Admin.php:23194 #: src/Admin.php:79 src/Admin.php:246 95 95 msgid "Secret key" 96 96 msgstr "Секретный ключ" 97 97 98 #: src/Admin.php:7 698 #: src/Admin.php:79 99 99 msgid "" 100 100 "For orders, customers and the catalog; needs the products.write permission." 101 101 msgstr "Для заказов, покупателей и каталога; нужно право products.write." 102 102 103 #: src/Admin.php:79 103 #: src/Admin.php:80 104 msgid "Identity key" 105 msgstr "Ключ подписи" 106 107 #: src/Admin.php:80 108 msgid "" 109 "Signs the id of the signed-in customer for the tracker, so OneTrace trusts " 110 "it when the project requires signed user ids. It is in OneTrace → Site → " 111 "Connection → Server." 112 msgstr "" 113 "Подписывает id вошедшего покупателя для трекера, и OneTrace принимает его, " 114 "когда в проекте включено «Требовать подпись». Ключ — в OneTrace → Сайт → " 115 "Подключение → Сервер." 116 117 #: src/Admin.php:83 104 118 msgid "What to send" 105 119 msgstr "Что передавать" 106 120 107 #: src/Admin.php:8 0121 #: src/Admin.php:84 108 122 msgid "Tracker" 109 123 msgstr "Трекер" 110 124 111 #: src/Admin.php:8 0125 #: src/Admin.php:84 112 126 msgid "Page and product views on the storefront" 113 127 msgstr "Просмотры страниц и товаров на витрине" 114 128 115 #: src/Admin.php:8 1129 #: src/Admin.php:85 116 130 msgid "Cookie consent" 117 131 msgstr "Согласие на cookie" 118 132 119 #: src/Admin.php:8 1133 #: src/Admin.php:85 120 134 msgid "" 121 135 "Load the tracker after the visitor agrees to statistics cookies (with a " … … 125 139 "плагином согласия, который поддерживает WP Consent API)" 126 140 127 #: src/Admin.php:8 2141 #: src/Admin.php:86 128 142 msgid "Orders" 129 143 msgstr "Заказы" 130 144 131 #: src/Admin.php:8 2145 #: src/Admin.php:86 132 146 msgid "" 133 147 "Placed, paid, shipped, delivered, cancelled and refunded orders with the " … … 137 151 "возвраты с данными покупателя" 138 152 139 #: src/Admin.php:8 3153 #: src/Admin.php:87 140 154 msgid "Cart" 141 155 msgstr "Корзина" 142 156 143 #: src/Admin.php:8 3157 #: src/Admin.php:87 144 158 msgid "" 145 159 "Adding to and removing from the cart, opening the checkout — for abandoned " … … 149 163 "брошенной корзины" 150 164 151 #: src/Admin.php:8 4165 #: src/Admin.php:88 152 166 msgid "Wishlist" 153 167 msgstr "Избранное" 154 168 155 #: src/Admin.php:8 4169 #: src/Admin.php:88 156 170 msgid "" 157 171 "Adding to and removing from the wishlist of YITH WooCommerce Wishlist or TI " … … 161 175 "WooCommerce Wishlist — для цепочек по избранному" 162 176 163 #: src/Admin.php:8 5177 #: src/Admin.php:89 164 178 msgid "Product catalog" 165 179 msgstr "Каталог товаров" 166 180 167 #: src/Admin.php:8 5181 #: src/Admin.php:89 168 182 msgid "" 169 183 "Products, categories and stock for recommendations, emails and catalog " … … 173 187 "при изменении товаров и остатков и раз в сутки" 174 188 175 #: src/Admin.php: 86189 #: src/Admin.php:90 176 190 msgid "Product id" 177 191 msgstr "ID товара" 178 192 179 #: src/Admin.php: 86193 #: src/Admin.php:90 180 194 msgid "Post ID" 181 195 msgstr "ID записи" 182 196 183 #: src/Admin.php: 86197 #: src/Admin.php:90 184 198 msgid "SKU (the post ID for products without a SKU)" 185 199 msgstr "Артикул (ID записи, если артикула нет)" 186 200 187 #: src/Admin.php: 86201 #: src/Admin.php:90 188 202 msgid "" 189 203 "Choose SKU if your OneTrace project already has the catalog and history " … … 193 207 "артикулам, например после переезда с другой платформы." 194 208 195 #: src/Admin.php: 89209 #: src/Admin.php:93 196 210 msgid "Newsletter consent" 197 211 msgstr "Согласие на рассылку" 198 212 199 #: src/Admin.php: 89213 #: src/Admin.php:93 200 214 msgid "" 201 215 "A checkbox subscribes the customer to marketing emails in OneTrace. Without " … … 205 219 "согласие не передаётся." 206 220 207 #: src/Admin.php:9 0221 #: src/Admin.php:94 208 222 msgid "Checkout" 209 223 msgstr "Оформление заказа" 210 224 211 #: src/Admin.php:9 0225 #: src/Admin.php:94 212 226 msgid "Checkbox at checkout (classic and block)" 213 227 msgstr "Галочка при оформлении заказа (классическом и блочном)" 214 228 215 #: src/Admin.php:9 1229 #: src/Admin.php:95 216 230 msgid "Registration" 217 231 msgstr "Регистрация" 218 232 219 #: src/Admin.php:9 1233 #: src/Admin.php:95 220 234 msgid "Checkbox in the registration form" 221 235 msgstr "Галочка в форме регистрации" 222 236 223 #: src/Admin.php:9 2237 #: src/Admin.php:96 224 238 msgid "Account" 225 239 msgstr "Личный кабинет" 226 240 227 #: src/Admin.php:9 2241 #: src/Admin.php:96 228 242 msgid "Subscribe and unsubscribe on the account details page" 229 243 msgstr "Подписка и отписка на странице данных аккаунта" 230 244 231 #: src/Admin.php:9 3245 #: src/Admin.php:97 232 246 msgid "Checkbox text" 233 247 msgstr "Текст галочки" 234 248 235 #: src/Admin.php:9 3 src/Settings.php:97249 #: src/Admin.php:97 src/Settings.php:102 236 250 msgid "Send me news and special offers by email" 237 251 msgstr "Присылать новости и специальные предложения по email" 238 252 239 #: src/Admin.php:9 4253 #: src/Admin.php:98 240 254 msgid "Subscription topic" 241 255 msgstr "Тема подписки" 242 256 243 #: src/Admin.php:9 4257 #: src/Admin.php:98 244 258 msgid "Empty — the whole email channel." 245 259 msgstr "Пусто — весь канал email." 246 260 247 #: src/Admin.php:9 5261 #: src/Admin.php:99 248 262 msgid "Newsletters in My account" 249 263 msgstr "Рассылки в личном кабинете" 250 264 251 #: src/Admin.php:9 5265 #: src/Admin.php:99 252 266 msgid "" 253 267 "My account → Newsletters: subscription topics by channel, frequency, a pause " … … 259 273 "profiles.read и profiles.write)" 260 274 261 #: src/Admin.php:9 5275 #: src/Admin.php:99 262 276 msgid "" 263 277 "Topics and their names are set up in OneTrace → Messaging rules → " … … 267 281 "подписки»." 268 282 269 #: src/Admin.php: 98283 #: src/Admin.php:102 270 284 msgid "Recommendations, search and Web Push" 271 285 msgstr "Рекомендации, поиск и Web Push" 272 286 273 #: src/Admin.php: 98287 #: src/Admin.php:102 274 288 msgid "" 275 289 "Widget ids are in the \"Site → Widgets\" section of the platform. Anywhere " … … 279 293 "другом месте используйте шорткод [onetrace_widget id=\"…\"]." 280 294 281 #: src/Admin.php: 99295 #: src/Admin.php:103 282 296 msgid "Widget on the product page" 283 297 msgstr "Виджет на странице товара" 284 298 285 #: src/Admin.php:10 0299 #: src/Admin.php:104 286 300 msgid "Widget in the cart" 287 301 msgstr "Виджет в корзине" 288 302 289 #: src/Admin.php:10 1303 #: src/Admin.php:105 290 304 msgid "Web Push" 291 305 msgstr "Web Push" 292 306 293 #: src/Admin.php:10 1307 #: src/Admin.php:105 294 308 msgid "" 295 309 "Serve /cdp-sw.js from the store root; put the [onetrace_push_button] " … … 299 313 "поставьте там, где посетители подписываются" 300 314 301 #: src/Admin.php:10 2315 #: src/Admin.php:106 302 316 msgid "Product search" 303 317 msgstr "Поиск по товарам" 304 318 305 #: src/Admin.php:10 2319 #: src/Admin.php:106 306 320 msgid "" 307 321 "Results of the store search and suggestions while typing come from OneTrace " … … 312 326 "товарам должен быть в тарифе проекта); при ошибке — обычный поиск WordPress" 313 327 314 #: src/Admin.php:10 3328 #: src/Admin.php:107 315 329 msgid "OneTrace search widget" 316 330 msgstr "Виджет поиска OneTrace" 317 331 318 #: src/Admin.php:10 3332 #: src/Admin.php:107 319 333 msgid "" 320 334 "The search page shows the results widget of OneTrace — facets, sorting, " … … 326 340 "полями поиска открывается слой поиска (нужен трекер)" 327 341 328 #: src/Admin.php:10 3342 #: src/Admin.php:107 329 343 msgid "" 330 344 "Turn the widget on and set up its look in OneTrace → Site → Search. While it " … … 334 348 "выключен или OneTrace недоступен, страница поиска остаётся прежней." 335 349 336 #: src/Admin.php:10 4350 #: src/Admin.php:108 337 351 msgid "Notify when available" 338 352 msgstr "Сообщить о поступлении" 339 353 340 #: src/Admin.php:10 4354 #: src/Admin.php:108 341 355 msgid "" 342 356 "Show the “Notify when available” form on the page of a product that is out " … … 345 359 "Показывать форму «Сообщить о поступлении» на странице товара не в наличии" 346 360 347 #: src/Admin.php:10 4361 #: src/Admin.php:108 348 362 msgid "" 349 363 "The form itself is set up in OneTrace → Site → Forms (kind “Notify when " … … 353 367 "поступлении»); без активной формы этого вида ничего не показывается." 354 368 355 #: src/Admin.php:10 5369 #: src/Admin.php:109 356 370 msgid "Ask AI about a product" 357 371 msgstr "Спросить ИИ о товаре" 358 372 359 #: src/Admin.php:10 5373 #: src/Admin.php:109 360 374 msgid "Show \"Ask AI about this product\" on product pages" 361 375 msgstr "Показывать «Спросить ИИ о товаре» на страницах товаров" 362 376 363 #: src/Admin.php:10 5377 #: src/Admin.php:109 364 378 msgid "" 365 379 "It appears only when the widget is turned on in OneTrace → Site → Product " … … 369 383 msgstr "" 370 384 "Появляется, только когда виджет включён в OneTrace → Сайт → Вопрос о товаре; " 371 "ИИ отвечает по описанию товара и базе знаний магазина. Чтобы поставить его "372 " вдругое место, выключите эту настройку и используйте шорткод [onetrace_ask]."373 374 #: src/Admin.php:1 08385 "ИИ отвечает по описанию товара и базе знаний магазина. Чтобы поставить его в " 386 "другое место, выключите эту настройку и используйте шорткод [onetrace_ask]." 387 388 #: src/Admin.php:112 375 389 msgid "Loyalty program" 376 390 msgstr "Программа лояльности" 377 391 378 #: src/Admin.php:1 08392 #: src/Admin.php:112 379 393 msgid "" 380 394 "The program is set up in the \"Loyalty\" section of the platform. Signed-in " … … 386 400 "видят баллы в «Мой аккаунт → Бонусные баллы»." 387 401 388 #: src/Admin.php:1 09src/LoyaltyAccount.php:73 src/LoyaltyBlocks.php:78402 #: src/Admin.php:113 src/LoyaltyAccount.php:73 src/LoyaltyBlocks.php:78 389 403 #: src/LoyaltyCart.php:52 src/LoyaltyCart.php:53 390 404 msgid "Bonus points" 391 405 msgstr "Бонусные баллы" 392 406 393 #: src/Admin.php:1 09407 #: src/Admin.php:113 394 408 msgid "" 395 409 "Show the balance and use points in the cart and at checkout (the secret key " … … 399 413 "ключу нужны права loyalty.read и loyalty.write)" 400 414 401 #: src/Admin.php:11 0415 #: src/Admin.php:114 402 416 msgid "Referrals" 403 417 msgstr "Приглашения" 404 418 405 #: src/Admin.php:11 0419 #: src/Admin.php:114 406 420 msgid "" 407 421 "The \"Friend's code\" field in the registration form. Without it the code of " … … 411 425 "ref=) всё равно засчитывается: трекер сохраняет его в cookie." 412 426 413 #: src/Admin.php:11 3427 #: src/Admin.php:117 414 428 msgid "Promo codes" 415 429 msgstr "Промокоды" 416 430 417 #: src/Admin.php:11 3431 #: src/Admin.php:117 418 432 msgid "" 419 433 "Unique codes of OneTrace promo code pools become WooCommerce coupons every 5 " … … 427 441 "привяжите его к ключу пула из раздела «Промокоды» платформы." 428 442 429 #: src/Admin.php:11 4443 #: src/Admin.php:118 430 444 msgid "Pools and template coupons" 431 445 msgstr "Пулы и купоны-образцы" 432 446 433 #: src/Admin.php:11 4447 #: src/Admin.php:118 434 448 msgid "" 435 449 "One per line: pool key = template coupon code. The secret key needs the " … … 439 453 "право promo.read." 440 454 441 #: src/Admin.php:1 17455 #: src/Admin.php:121 442 456 msgid "AI chat bot: store MCP" 443 457 msgstr "ИИ-бот чата: MCP магазина" 444 458 445 #: src/Admin.php:1 17459 #: src/Admin.php:121 446 460 msgid "" 447 461 "The AI bot of the OneTrace chat answers customers with live data of the " … … 455 469 "на email. Секретному ключу нужно право chats.manage." 456 470 457 #: src/Admin.php:1 18471 #: src/Admin.php:122 458 472 msgid "Store MCP server" 459 473 msgstr "MCP-сервер магазина" 460 474 461 #: src/Admin.php:1 18475 #: src/Admin.php:122 462 476 msgid "Connect the store to the AI chat bot" 463 477 msgstr "Подключить магазин к ИИ-боту чата" 464 478 465 #: src/Admin.php:1 19479 #: src/Admin.php:123 466 480 msgid "What the bot may do" 467 481 msgstr "Что разрешено боту" 468 482 469 #: src/Admin.php:1 19483 #: src/Admin.php:123 470 484 msgid "" 471 485 "Reading is safe; actions change orders and run only after the customer " … … 475 489 "покупателя в чате." 476 490 477 #: src/Admin.php:13 0491 #: src/Admin.php:134 478 492 msgid "Send a confirmation code" 479 493 msgstr "Отправлять код подтверждения" 480 494 481 #: src/Admin.php:13 1495 #: src/Admin.php:135 482 496 msgid "Check the confirmation code" 483 497 msgstr "Проверять код подтверждения" 484 498 485 #: src/Admin.php:13 2499 #: src/Admin.php:136 486 500 msgid "Read the confirmed customer" 487 501 msgstr "Читать подтверждённого покупателя" 488 502 489 #: src/Admin.php:13 3503 #: src/Admin.php:137 490 504 msgid "Read the customer's orders" 491 505 msgstr "Читать заказы покупателя" 492 506 493 #: src/Admin.php:13 4507 #: src/Admin.php:138 494 508 msgid "Read an order" 495 509 msgstr "Читать заказ" 496 510 497 #: src/Admin.php:13 5511 #: src/Admin.php:139 498 512 msgid "Read parcel tracking" 499 513 msgstr "Читать отслеживание посылки" 500 514 501 #: src/Admin.php:1 36515 #: src/Admin.php:140 502 516 msgid "Read stock and prices" 503 517 msgstr "Читать наличие и цены" 504 518 505 #: src/Admin.php:1 37519 #: src/Admin.php:141 506 520 msgid "Read delivery methods" 507 521 msgstr "Читать способы доставки" 508 522 509 #: src/Admin.php:1 38523 #: src/Admin.php:142 510 524 msgid "Read the return policy" 511 525 msgstr "Читать условия возврата" 512 526 513 #: src/Admin.php:1 39527 #: src/Admin.php:143 514 528 msgid "Action: cancel an unpaid order" 515 529 msgstr "Действие: отменять неоплаченный заказ" 516 530 517 #: src/Admin.php:14 0531 #: src/Admin.php:144 518 532 msgid "Action: pass a return request to the shop" 519 533 msgstr "Действие: передавать магазину заявку на возврат" 520 534 521 #: src/Admin.php:14 1535 #: src/Admin.php:145 522 536 msgid "Action: pass a delivery change request to the shop" 523 537 msgstr "Действие: передавать магазину запрос на изменение доставки" 524 538 525 #: src/Admin.php:1 55539 #: src/Admin.php:160 526 540 msgid "Saved — enter a new key to replace it" 527 541 msgstr "Сохранён — введите новый ключ, чтобы заменить" 528 542 529 543 #. translators: %s: project name 530 #: src/Admin.php:2 21544 #: src/Admin.php:236 531 545 #, php-format 532 546 msgid "Write key: project \"%s\"." … … 534 548 535 549 #. translators: %s: project name 536 #: src/Admin.php:2 23550 #: src/Admin.php:238 537 551 #, php-format 538 552 msgid "Secret key: project \"%s\"." 539 553 msgstr "Секретный ключ: проект «%s»." 540 554 541 #: src/Admin.php:2 25555 #: src/Admin.php:240 542 556 msgid "" 543 557 "The key has no products.write permission: the catalog will not be uploaded." 544 558 msgstr "У ключа нет права products.write: каталог не будет выгружаться." 545 559 546 #: src/Admin.php:2 26560 #: src/Admin.php:241 547 561 msgid "" 548 562 "The key has no loyalty.read and loyalty.write permissions: bonus points will " … … 552 566 "будут." 553 567 554 #: src/Admin.php:2 27568 #: src/Admin.php:242 555 569 msgid "" 556 570 "The key has no promo.read permission: promo codes will not become coupons." 557 571 msgstr "У ключа нет права promo.read: промокоды не станут купонами." 558 572 559 #: src/Admin.php:2 28573 #: src/Admin.php:243 560 574 msgid "" 561 575 "The key has no profiles.read and profiles.write permissions: the Newsletters " … … 565 579 "не будет." 566 580 567 #: src/Admin.php:2 36581 #: src/Admin.php:251 568 582 msgid "Enter the platform address and the keys first." 569 583 msgstr "Сначала укажите адрес платформы и ключи." 570 584 571 #: src/Admin.php:2 53585 #: src/Admin.php:268 572 586 msgid "The catalog upload has started; it runs in the background." 573 587 msgstr "Выгрузка каталога началась, она идёт в фоне." 574 588 575 #: src/Admin.php:2 75589 #: src/Admin.php:290 576 590 msgid "" 577 591 "OneTrace: sending is paused because the platform rejected the key. Check the " … … 581 595 "ключи и сохраните настройки." 582 596 583 #: src/Admin.php: 288597 #: src/Admin.php:303 584 598 msgid "Status" 585 599 msgstr "Состояние" 586 600 587 #: src/Admin.php: 291601 #: src/Admin.php:306 588 602 msgid "Queue" 589 603 msgstr "Очередь" 590 604 591 605 #. translators: 1: items waiting, 2: items waiting for a retry 592 #: src/Admin.php: 294606 #: src/Admin.php:309 593 607 #, php-format 594 608 msgid "%1$d waiting, %2$d of them after an error" 595 609 msgstr "Ждут отправки: %1$d, из них после ошибки: %2$d" 596 610 597 #: src/Admin.php:3 01611 #: src/Admin.php:316 598 612 msgid "Last error" 599 613 msgstr "Последняя ошибка" 600 614 601 #: src/Admin.php:3 09615 #: src/Admin.php:324 602 616 msgid "AI chat bot" 603 617 msgstr "ИИ-бот чата" 604 618 605 619 #. translators: %s: tools the bot uses 606 #: src/Admin.php:3 12620 #: src/Admin.php:327 607 621 #, php-format 608 622 msgid "Connected: %s" 609 623 msgstr "Подключён: %s" 610 624 611 #: src/Admin.php:3 18625 #: src/Admin.php:333 612 626 msgid "Test connection" 613 627 msgstr "Проверить подключение" 614 628 615 #: src/Admin.php:3 20629 #: src/Admin.php:335 616 630 msgid "Upload the whole catalog" 617 631 msgstr "Выгрузить весь каталог" 618 632 619 #: src/Admin.php:3 30633 #: src/Admin.php:345 620 634 msgid "Store emails" 621 635 msgstr "Письма магазина" 622 636 623 #: src/Admin.php:3 31637 #: src/Admin.php:346 624 638 msgid "" 625 639 "Emails of WooCommerce, WordPress and other plugins can go out through the " … … 638 652 "Письмо, которое OneTrace не принял, магазин отправляет сам." 639 653 640 #: src/Admin.php:3 40 src/Admin.php:343654 #: src/Admin.php:355 src/Admin.php:358 641 655 msgid "State" 642 656 msgstr "Состояние" 643 657 644 #: src/Admin.php:3 40658 #: src/Admin.php:355 645 659 msgid "Enter the platform address and the secret key." 646 660 msgstr "Укажите адрес платформы и секретный ключ." 647 661 648 #: src/Admin.php:3 43662 #: src/Admin.php:358 649 663 msgid "Not available — the store sends its emails itself." 650 664 msgstr "Недоступно — магазин отправляет письма сам." 651 665 652 #: src/Admin.php:3 46666 #: src/Admin.php:361 653 667 msgid "Order placed" 654 668 msgstr "Заказ оформлен" 655 669 656 #: src/Admin.php:3 47670 #: src/Admin.php:362 657 671 msgid "Order paid" 658 672 msgstr "Заказ оплачен" 659 673 660 #: src/Admin.php:3 48674 #: src/Admin.php:363 661 675 msgid "Order shipped" 662 676 msgstr "Заказ отправлен" 663 677 664 #: src/Admin.php:3 49678 #: src/Admin.php:364 665 679 msgid "Order delivered" 666 680 msgstr "Заказ доставлен" 667 681 668 #: src/Admin.php:3 50682 #: src/Admin.php:365 669 683 msgid "Order cancelled" 670 684 msgstr "Заказ отменён" 671 685 672 #: src/Admin.php:3 51686 #: src/Admin.php:366 673 687 msgid "Order refunded" 674 688 msgstr "Возврат по заказу" 675 689 676 #: src/Admin.php:3 55690 #: src/Admin.php:370 677 691 msgid "All store emails" 678 692 msgstr "Все письма магазина" 679 693 680 #: src/Admin.php:3 56694 #: src/Admin.php:371 681 695 msgid "" 682 696 "Through OneTrace: emails without a OneTrace template go out as the store " … … 686 700 "магазин" 687 701 688 #: src/Admin.php:3 57702 #: src/Admin.php:372 689 703 msgid "Sent by the store" 690 704 msgstr "Отправляет магазин" 691 705 692 #: src/Admin.php:3 58706 #: src/Admin.php:373 693 707 msgid "Order emails from OneTrace templates" 694 708 msgstr "Письма о заказе по шаблонам OneTrace" 695 709 696 #: src/Admin.php:3 58710 #: src/Admin.php:373 697 711 msgid "None" 698 712 msgstr "Нет" 699 713 700 #: src/Admin.php:3 63714 #: src/Admin.php:378 701 715 msgid "Store emails in OneTrace" 702 716 msgstr "Письма магазина в OneTrace" 703 717 704 #: src/Admin.php:3 64718 #: src/Admin.php:379 705 719 msgid "OneTrace → Store emails" 706 720 msgstr "OneTrace → Письма магазина" 707 721 708 #: src/Admin.php:4 08722 #: src/Admin.php:423 709 723 msgid "You are not allowed to do this." 710 724 msgstr "У вас нет прав на это действие." … … 999 1013 msgstr "(необязательно)" 1000 1014 1001 #: src/Storefront.php:29 31015 #: src/Storefront.php:295 1002 1016 msgid "Get notifications" 1003 1017 msgstr "Получать уведомления" -
onetrace-for-woocommerce/trunk/languages/onetrace-for-woocommerce.pot
r3763672 r3778798 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: OneTrace for WooCommerce 1.1 4.0\n"5 "Project-Id-Version: OneTrace for WooCommerce 1.15.0\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/onetrace-for-woocommerce\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-1 0-24T18:48:10+00:00\n"12 "POT-Creation-Date: 2026-11-02T00:39:09+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 46 46 msgstr "" 47 47 48 #: src/Admin.php:4 549 #: src/Admin.php:2 7750 #: src/Admin.php:3 6248 #: src/Admin.php:48 49 #: src/Admin.php:292 50 #: src/Admin.php:377 51 51 msgid "Settings" 52 52 msgstr "" 53 53 54 #: src/Admin.php:6 054 #: src/Admin.php:63 55 55 msgid "Set in wp-config.php." 56 56 msgstr "" 57 57 58 #: src/Admin.php:7 358 #: src/Admin.php:76 59 59 msgid "Connection" 60 60 msgstr "" 61 61 62 #: src/Admin.php:7 362 #: src/Admin.php:76 63 63 msgid "Keys are in the \"API keys\" section of your OneTrace project." 64 64 msgstr "" 65 65 66 #: src/Admin.php:7 466 #: src/Admin.php:77 67 67 msgid "Platform address" 68 68 msgstr "" 69 69 70 #: src/Admin.php:7 470 #: src/Admin.php:77 71 71 msgid "The address you open the platform at: the domain of your brand." 72 72 msgstr "" 73 73 74 #: src/Admin.php:7 575 #: src/Admin.php:2 3174 #: src/Admin.php:78 75 #: src/Admin.php:246 76 76 msgid "Write key" 77 77 msgstr "" 78 78 79 #: src/Admin.php:7 579 #: src/Admin.php:78 80 80 msgid "For the tracker on the storefront." 81 81 msgstr "" 82 82 83 #: src/Admin.php:7 684 #: src/Admin.php:2 3183 #: src/Admin.php:79 84 #: src/Admin.php:246 85 85 msgid "Secret key" 86 86 msgstr "" 87 87 88 #: src/Admin.php:7 688 #: src/Admin.php:79 89 89 msgid "For orders, customers and the catalog; needs the products.write permission." 90 90 msgstr "" 91 91 92 #: src/Admin.php:79 92 #: src/Admin.php:80 93 msgid "Identity key" 94 msgstr "" 95 96 #: src/Admin.php:80 97 msgid "Signs the id of the signed-in customer for the tracker, so OneTrace trusts it when the project requires signed user ids. It is in OneTrace → Site → Connection → Server." 98 msgstr "" 99 100 #: src/Admin.php:83 93 101 msgid "What to send" 94 102 msgstr "" 95 103 96 #: src/Admin.php:8 0104 #: src/Admin.php:84 97 105 msgid "Tracker" 98 106 msgstr "" 99 107 100 #: src/Admin.php:8 0108 #: src/Admin.php:84 101 109 msgid "Page and product views on the storefront" 102 110 msgstr "" 103 111 104 #: src/Admin.php:8 1112 #: src/Admin.php:85 105 113 msgid "Cookie consent" 106 114 msgstr "" 107 115 108 #: src/Admin.php:8 1116 #: src/Admin.php:85 109 117 msgid "Load the tracker after the visitor agrees to statistics cookies (with a consent plugin that supports the WP Consent API)" 110 118 msgstr "" 111 119 112 #: src/Admin.php:8 2120 #: src/Admin.php:86 113 121 msgid "Orders" 114 122 msgstr "" 115 123 116 #: src/Admin.php:8 2124 #: src/Admin.php:86 117 125 msgid "Placed, paid, shipped, delivered, cancelled and refunded orders with the customer data" 118 126 msgstr "" 119 127 120 #: src/Admin.php:8 3128 #: src/Admin.php:87 121 129 msgid "Cart" 122 130 msgstr "" 123 131 124 #: src/Admin.php:8 3132 #: src/Admin.php:87 125 133 msgid "Adding to and removing from the cart, opening the checkout — for abandoned cart journeys" 126 134 msgstr "" 127 135 128 #: src/Admin.php:8 4136 #: src/Admin.php:88 129 137 msgid "Wishlist" 130 138 msgstr "" 131 139 132 #: src/Admin.php:8 4140 #: src/Admin.php:88 133 141 msgid "Adding to and removing from the wishlist of YITH WooCommerce Wishlist or TI WooCommerce Wishlist — for wishlist journeys" 134 142 msgstr "" 135 143 136 #: src/Admin.php:8 5144 #: src/Admin.php:89 137 145 msgid "Product catalog" 138 146 msgstr "" 139 147 140 #: src/Admin.php:8 5148 #: src/Admin.php:89 141 149 msgid "Products, categories and stock for recommendations, emails and catalog journeys, updated when products or their stock change and daily" 142 150 msgstr "" 143 151 144 #: src/Admin.php: 86152 #: src/Admin.php:90 145 153 msgid "Product id" 146 154 msgstr "" 147 155 148 #: src/Admin.php: 86156 #: src/Admin.php:90 149 157 msgid "Post ID" 150 158 msgstr "" 151 159 152 #: src/Admin.php: 86160 #: src/Admin.php:90 153 161 msgid "SKU (the post ID for products without a SKU)" 154 162 msgstr "" 155 163 156 #: src/Admin.php: 86164 #: src/Admin.php:90 157 165 msgid "Choose SKU if your OneTrace project already has the catalog and history under SKUs, e.g. after moving from another platform." 158 166 msgstr "" 159 167 160 #: src/Admin.php: 89168 #: src/Admin.php:93 161 169 msgid "Newsletter consent" 162 170 msgstr "" 163 171 164 #: src/Admin.php: 89172 #: src/Admin.php:93 165 173 msgid "A checkbox subscribes the customer to marketing emails in OneTrace. Without it no consent is sent." 166 174 msgstr "" 167 175 168 #: src/Admin.php:9 0176 #: src/Admin.php:94 169 177 msgid "Checkout" 170 178 msgstr "" 171 179 172 #: src/Admin.php:9 0180 #: src/Admin.php:94 173 181 msgid "Checkbox at checkout (classic and block)" 174 182 msgstr "" 175 183 176 #: src/Admin.php:9 1184 #: src/Admin.php:95 177 185 msgid "Registration" 178 186 msgstr "" 179 187 180 #: src/Admin.php:9 1188 #: src/Admin.php:95 181 189 msgid "Checkbox in the registration form" 182 190 msgstr "" 183 191 184 #: src/Admin.php:9 2192 #: src/Admin.php:96 185 193 msgid "Account" 186 194 msgstr "" 187 195 188 #: src/Admin.php:9 2196 #: src/Admin.php:96 189 197 msgid "Subscribe and unsubscribe on the account details page" 190 198 msgstr "" 191 199 192 #: src/Admin.php:9 3200 #: src/Admin.php:97 193 201 msgid "Checkbox text" 194 202 msgstr "" 195 203 196 #: src/Admin.php:9 3197 #: src/Settings.php: 97204 #: src/Admin.php:97 205 #: src/Settings.php:102 198 206 msgid "Send me news and special offers by email" 199 207 msgstr "" 200 208 201 #: src/Admin.php:9 4209 #: src/Admin.php:98 202 210 msgid "Subscription topic" 203 211 msgstr "" 204 212 205 #: src/Admin.php:9 4213 #: src/Admin.php:98 206 214 msgid "Empty — the whole email channel." 207 215 msgstr "" 208 216 209 #: src/Admin.php:9 5217 #: src/Admin.php:99 210 218 msgid "Newsletters in My account" 211 219 msgstr "" 212 220 213 #: src/Admin.php:9 5221 #: src/Admin.php:99 214 222 msgid "My account → Newsletters: subscription topics by channel, frequency, a pause and unsubscribing from everything, as in the OneTrace preference center (the secret key needs the profiles.read and profiles.write permissions)" 215 223 msgstr "" 216 224 217 #: src/Admin.php:9 5225 #: src/Admin.php:99 218 226 msgid "Topics and their names are set up in OneTrace → Messaging rules → Subscription topics." 219 227 msgstr "" 220 228 221 #: src/Admin.php: 98229 #: src/Admin.php:102 222 230 msgid "Recommendations, search and Web Push" 223 231 msgstr "" 224 232 225 #: src/Admin.php: 98233 #: src/Admin.php:102 226 234 msgid "Widget ids are in the \"Site → Widgets\" section of the platform. Anywhere else use the [onetrace_widget id=\"…\"] shortcode." 227 235 msgstr "" 228 236 229 #: src/Admin.php: 99237 #: src/Admin.php:103 230 238 msgid "Widget on the product page" 231 239 msgstr "" 232 240 233 #: src/Admin.php:10 0241 #: src/Admin.php:104 234 242 msgid "Widget in the cart" 235 243 msgstr "" 236 244 237 #: src/Admin.php:10 1245 #: src/Admin.php:105 238 246 msgid "Web Push" 239 247 msgstr "" 240 248 241 #: src/Admin.php:10 1249 #: src/Admin.php:105 242 250 msgid "Serve /cdp-sw.js from the store root; put the [onetrace_push_button] shortcode where visitors subscribe" 243 251 msgstr "" 244 252 245 #: src/Admin.php:10 2253 #: src/Admin.php:106 246 254 msgid "Product search" 247 255 msgstr "" 248 256 249 #: src/Admin.php:10 2257 #: src/Admin.php:106 250 258 msgid "Results of the store search and suggestions while typing come from OneTrace (the plan of the project must include product search); on an error — the usual WordPress search" 251 259 msgstr "" 252 260 253 #: src/Admin.php:10 3261 #: src/Admin.php:107 254 262 msgid "OneTrace search widget" 255 263 msgstr "" 256 264 257 #: src/Admin.php:10 3265 #: src/Admin.php:107 258 266 msgid "The search page shows the results widget of OneTrace — facets, sorting, infinite scroll and an \"Add to cart\" button — inside your theme, and a search layer opens under the search fields (needs the tracker)" 259 267 msgstr "" 260 268 261 #: src/Admin.php:10 3269 #: src/Admin.php:107 262 270 msgid "Turn the widget on and set up its look in OneTrace → Site → Search. While it is off there, or OneTrace is unavailable, the search page stays as it is." 263 271 msgstr "" 264 272 265 #: src/Admin.php:10 4273 #: src/Admin.php:108 266 274 msgid "Notify when available" 267 275 msgstr "" 268 276 269 #: src/Admin.php:10 4277 #: src/Admin.php:108 270 278 msgid "Show the “Notify when available” form on the page of a product that is out of stock" 271 279 msgstr "" 272 280 273 #: src/Admin.php:10 4281 #: src/Admin.php:108 274 282 msgid "The form itself is set up in OneTrace → Site → Forms (kind “Notify when available”); without an active form of this kind nothing is shown." 275 283 msgstr "" 276 284 277 #: src/Admin.php:10 5285 #: src/Admin.php:109 278 286 msgid "Ask AI about a product" 279 287 msgstr "" 280 288 281 #: src/Admin.php:10 5289 #: src/Admin.php:109 282 290 msgid "Show \"Ask AI about this product\" on product pages" 283 291 msgstr "" 284 292 285 #: src/Admin.php:10 5293 #: src/Admin.php:109 286 294 msgid "It appears only when the widget is turned on in OneTrace → Site → Product questions; the AI answers from the product description and the knowledge base of the store. To place it elsewhere, turn this off and use the [onetrace_ask] shortcode." 287 295 msgstr "" 288 296 289 #: src/Admin.php:1 08297 #: src/Admin.php:112 290 298 msgid "Loyalty program" 291 299 msgstr "" 292 300 293 #: src/Admin.php:1 08301 #: src/Admin.php:112 294 302 msgid "The program is set up in the \"Loyalty\" section of the platform. Signed-in customers pay for part of the order with points in the cart and at checkout and see their points in My account → Bonus points." 295 303 msgstr "" 296 304 297 #: src/Admin.php:1 09305 #: src/Admin.php:113 298 306 #: src/LoyaltyAccount.php:73 299 307 #: src/LoyaltyBlocks.php:78 … … 303 311 msgstr "" 304 312 305 #: src/Admin.php:1 09313 #: src/Admin.php:113 306 314 msgid "Show the balance and use points in the cart and at checkout (the secret key needs the loyalty.read and loyalty.write permissions)" 307 315 msgstr "" 308 316 309 #: src/Admin.php:11 0317 #: src/Admin.php:114 310 318 msgid "Referrals" 311 319 msgstr "" 312 320 313 #: src/Admin.php:11 0321 #: src/Admin.php:114 314 322 msgid "The \"Friend's code\" field in the registration form. Without it the code of a referral link (?ref=) still counts: the tracker keeps it in a cookie." 315 323 msgstr "" 316 324 317 #: src/Admin.php:11 3325 #: src/Admin.php:117 318 326 msgid "Promo codes" 319 327 msgstr "" 320 328 321 #: src/Admin.php:11 3329 #: src/Admin.php:117 322 330 msgid "Unique codes of OneTrace promo code pools become WooCommerce coupons every 5 minutes: with the discount, restrictions and expiry of a template coupon, one use each. Create the template coupon in Marketing → Coupons and bind it to the pool key from the \"Promo codes\" section of the platform." 323 331 msgstr "" 324 332 325 #: src/Admin.php:11 4333 #: src/Admin.php:118 326 334 msgid "Pools and template coupons" 327 335 msgstr "" 328 336 329 #: src/Admin.php:11 4337 #: src/Admin.php:118 330 338 msgid "One per line: pool key = template coupon code. The secret key needs the promo.read permission." 331 339 msgstr "" 332 340 333 #: src/Admin.php:1 17341 #: src/Admin.php:121 334 342 msgid "AI chat bot: store MCP" 335 343 msgstr "" 336 344 337 #: src/Admin.php:1 17345 #: src/Admin.php:121 338 346 msgid "The AI bot of the OneTrace chat answers customers with live data of the store and, if you allow it, acts on orders. Customers signed in on the website are confirmed automatically, others with a code the shop sends by email. The secret key needs the chats.manage permission." 339 347 msgstr "" 340 348 341 #: src/Admin.php:1 18349 #: src/Admin.php:122 342 350 msgid "Store MCP server" 343 351 msgstr "" 344 352 345 #: src/Admin.php:1 18353 #: src/Admin.php:122 346 354 msgid "Connect the store to the AI chat bot" 347 355 msgstr "" 348 356 349 #: src/Admin.php:1 19357 #: src/Admin.php:123 350 358 msgid "What the bot may do" 351 359 msgstr "" 352 360 353 #: src/Admin.php:1 19361 #: src/Admin.php:123 354 362 msgid "Reading is safe; actions change orders and run only after the customer agreed in the chat." 355 363 msgstr "" 356 364 357 #: src/Admin.php:13 0365 #: src/Admin.php:134 358 366 msgid "Send a confirmation code" 359 367 msgstr "" 360 368 361 #: src/Admin.php:13 1369 #: src/Admin.php:135 362 370 msgid "Check the confirmation code" 363 371 msgstr "" 364 372 365 #: src/Admin.php:13 2373 #: src/Admin.php:136 366 374 msgid "Read the confirmed customer" 367 375 msgstr "" 368 376 369 #: src/Admin.php:13 3377 #: src/Admin.php:137 370 378 msgid "Read the customer's orders" 371 379 msgstr "" 372 380 373 #: src/Admin.php:13 4381 #: src/Admin.php:138 374 382 msgid "Read an order" 375 383 msgstr "" 376 384 377 #: src/Admin.php:13 5385 #: src/Admin.php:139 378 386 msgid "Read parcel tracking" 379 387 msgstr "" 380 388 381 #: src/Admin.php:1 36389 #: src/Admin.php:140 382 390 msgid "Read stock and prices" 383 391 msgstr "" 384 392 385 #: src/Admin.php:1 37393 #: src/Admin.php:141 386 394 msgid "Read delivery methods" 387 395 msgstr "" 388 396 389 #: src/Admin.php:1 38397 #: src/Admin.php:142 390 398 msgid "Read the return policy" 391 399 msgstr "" 392 400 393 #: src/Admin.php:1 39401 #: src/Admin.php:143 394 402 msgid "Action: cancel an unpaid order" 395 403 msgstr "" 396 404 397 #: src/Admin.php:14 0405 #: src/Admin.php:144 398 406 msgid "Action: pass a return request to the shop" 399 407 msgstr "" 400 408 401 #: src/Admin.php:14 1409 #: src/Admin.php:145 402 410 msgid "Action: pass a delivery change request to the shop" 403 411 msgstr "" 404 412 405 #: src/Admin.php:1 55413 #: src/Admin.php:160 406 414 msgid "Saved — enter a new key to replace it" 407 415 msgstr "" 408 416 409 417 #. translators: %s: project name 410 #: src/Admin.php:2 21418 #: src/Admin.php:236 411 419 #, php-format 412 420 msgid "Write key: project \"%s\"." … … 414 422 415 423 #. translators: %s: project name 416 #: src/Admin.php:2 23424 #: src/Admin.php:238 417 425 #, php-format 418 426 msgid "Secret key: project \"%s\"." 419 427 msgstr "" 420 428 421 #: src/Admin.php:2 25429 #: src/Admin.php:240 422 430 msgid "The key has no products.write permission: the catalog will not be uploaded." 423 431 msgstr "" 424 432 425 #: src/Admin.php:2 26433 #: src/Admin.php:241 426 434 msgid "The key has no loyalty.read and loyalty.write permissions: bonus points will not work." 427 435 msgstr "" 428 436 429 #: src/Admin.php:2 27437 #: src/Admin.php:242 430 438 msgid "The key has no promo.read permission: promo codes will not become coupons." 431 439 msgstr "" 432 440 433 #: src/Admin.php:2 28441 #: src/Admin.php:243 434 442 msgid "The key has no profiles.read and profiles.write permissions: the Newsletters tab will not work." 435 443 msgstr "" 436 444 437 #: src/Admin.php:2 36445 #: src/Admin.php:251 438 446 msgid "Enter the platform address and the keys first." 439 447 msgstr "" 440 448 441 #: src/Admin.php:2 53449 #: src/Admin.php:268 442 450 msgid "The catalog upload has started; it runs in the background." 443 451 msgstr "" 444 452 445 #: src/Admin.php:2 75453 #: src/Admin.php:290 446 454 msgid "OneTrace: sending is paused because the platform rejected the key. Check the keys and save the settings." 447 455 msgstr "" 448 456 449 #: src/Admin.php: 288457 #: src/Admin.php:303 450 458 msgid "Status" 451 459 msgstr "" 452 460 453 #: src/Admin.php: 291461 #: src/Admin.php:306 454 462 msgid "Queue" 455 463 msgstr "" 456 464 457 465 #. translators: 1: items waiting, 2: items waiting for a retry 458 #: src/Admin.php: 294466 #: src/Admin.php:309 459 467 #, php-format 460 468 msgid "%1$d waiting, %2$d of them after an error" 461 469 msgstr "" 462 470 463 #: src/Admin.php:3 01471 #: src/Admin.php:316 464 472 msgid "Last error" 465 473 msgstr "" 466 474 467 #: src/Admin.php:3 09475 #: src/Admin.php:324 468 476 msgid "AI chat bot" 469 477 msgstr "" 470 478 471 479 #. translators: %s: tools the bot uses 472 #: src/Admin.php:3 12480 #: src/Admin.php:327 473 481 #, php-format 474 482 msgid "Connected: %s" 475 483 msgstr "" 476 484 477 #: src/Admin.php:3 18485 #: src/Admin.php:333 478 486 msgid "Test connection" 479 487 msgstr "" 480 488 481 #: src/Admin.php:3 20489 #: src/Admin.php:335 482 490 msgid "Upload the whole catalog" 483 491 msgstr "" 484 492 485 #: src/Admin.php:3 30493 #: src/Admin.php:345 486 494 msgid "Store emails" 487 495 msgstr "" 488 496 489 #: src/Admin.php:3 31497 #: src/Admin.php:346 490 498 msgid "Emails of WooCommerce, WordPress and other plugins can go out through the email integration of your OneTrace project, with delivery statuses and history in the customer profile; order emails — from OneTrace templates in the customer's language. This is set up in the \"Store emails\" section of the platform; the secret key needs the \"Send messages manually\" permission (messages.send). An email OneTrace does not accept is sent by the store itself." 491 499 msgstr "" 492 500 493 #: src/Admin.php:3 40494 #: src/Admin.php:3 43501 #: src/Admin.php:355 502 #: src/Admin.php:358 495 503 msgid "State" 496 504 msgstr "" 497 505 498 #: src/Admin.php:3 40506 #: src/Admin.php:355 499 507 msgid "Enter the platform address and the secret key." 500 508 msgstr "" 501 509 502 #: src/Admin.php:3 43510 #: src/Admin.php:358 503 511 msgid "Not available — the store sends its emails itself." 504 512 msgstr "" 505 513 506 #: src/Admin.php:3 46514 #: src/Admin.php:361 507 515 msgid "Order placed" 508 516 msgstr "" 509 517 510 #: src/Admin.php:3 47518 #: src/Admin.php:362 511 519 msgid "Order paid" 512 520 msgstr "" 513 521 514 #: src/Admin.php:3 48522 #: src/Admin.php:363 515 523 msgid "Order shipped" 516 524 msgstr "" 517 525 518 #: src/Admin.php:3 49526 #: src/Admin.php:364 519 527 msgid "Order delivered" 520 528 msgstr "" 521 529 522 #: src/Admin.php:3 50530 #: src/Admin.php:365 523 531 msgid "Order cancelled" 524 532 msgstr "" 525 533 526 #: src/Admin.php:3 51534 #: src/Admin.php:366 527 535 msgid "Order refunded" 528 536 msgstr "" 529 537 530 #: src/Admin.php:3 55538 #: src/Admin.php:370 531 539 msgid "All store emails" 532 540 msgstr "" 533 541 534 #: src/Admin.php:3 56542 #: src/Admin.php:371 535 543 msgid "Through OneTrace: emails without a OneTrace template go out as the store makes them" 536 544 msgstr "" 537 545 538 #: src/Admin.php:3 57546 #: src/Admin.php:372 539 547 msgid "Sent by the store" 540 548 msgstr "" 541 549 542 #: src/Admin.php:3 58550 #: src/Admin.php:373 543 551 msgid "Order emails from OneTrace templates" 544 552 msgstr "" 545 553 546 #: src/Admin.php:3 58554 #: src/Admin.php:373 547 555 msgid "None" 548 556 msgstr "" 549 557 550 #: src/Admin.php:3 63558 #: src/Admin.php:378 551 559 msgid "Store emails in OneTrace" 552 560 msgstr "" 553 561 554 #: src/Admin.php:3 64562 #: src/Admin.php:379 555 563 msgid "OneTrace → Store emails" 556 564 msgstr "" 557 565 558 #: src/Admin.php:4 08566 #: src/Admin.php:423 559 567 msgid "You are not allowed to do this." 560 568 msgstr "" … … 843 851 msgstr "" 844 852 845 #: src/Storefront.php:29 3853 #: src/Storefront.php:295 846 854 msgid "Get notifications" 847 855 msgstr "" -
onetrace-for-woocommerce/trunk/onetrace-woocommerce.php
r3763672 r3778798 4 4 * Plugin URI: https://wordpress.org/plugins/onetrace-for-woocommerce/ 5 5 * Description: Connects the store to OneTrace.pro, the customer data platform: orders, customers and consents from the server, the website tracker, the product catalog with stock, wishlists, recommendation widgets, Web Push and the store's emails through OneTrace. 6 * Version: 1.1 4.06 * Version: 1.15.0 7 7 * Requires at least: 6.6 8 8 * Requires PHP: 7.4 … … 43 43 } 44 44 45 define('ONETRACE_WC_VERSION', '1.1 4.0');45 define('ONETRACE_WC_VERSION', '1.15.0'); 46 46 define('ONETRACE_WC_FILE', __FILE__); 47 47 -
onetrace-for-woocommerce/trunk/readme.txt
r3763672 r3778798 7 7 WC requires at least: 9.0 8 8 WC tested up to: 11.2 9 Stable tag: 1.1 4.09 Stable tag: 1.15.0 10 10 License: GPLv2 or later 11 11 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 47 47 2. In your OneTrace project create a write key and a secret key with the products.write permission (API keys section). 48 48 3. Go to WooCommerce → Settings → OneTrace, enter the platform address and both keys, click "Test connection". 49 4. Optionally enter the identity key from Site → Connection → Server of the project: the id of the signed-in customer reaches the tracker signed, and the project can require signed user ids. 49 50 50 51 == Frequently Asked Questions == … … 95 96 == Changelog == 96 97 98 = 1.15.0 = 99 * Signed user ids: the "Identity key" setting (or the ONETRACE_IDENTITY_KEY constant) signs the id of the signed-in customer for the OneTrace tracker, so the project can turn on "Require signature" and no visitor can link their browser to someone else's profile. 100 97 101 = 1.14.0 = 98 102 * "Ask AI about this product": the product page gets the place of the OneTrace widget after the add to cart area (classic and block themes; setting "Ask AI about a product", on by default) — it shows only when the widget is turned on in OneTrace → Site → Product questions. The `[onetrace_ask]` shortcode puts it anywhere. … … 172 176 == Upgrade Notice == 173 177 178 = 1.15.0 = 179 The "Identity key" setting: signed user ids for projects that require them. 180 174 181 = 1.14.0 = 175 182 "Ask AI about this product" on product pages and product descriptions in the catalog. -
onetrace-for-woocommerce/trunk/src/Admin.php
r3763672 r3778798 13 13 public const TAB = 'onetrace'; 14 14 15 /** Password fields that are never printed back, with their placeholders. */ 16 private const HIDDEN_KEYS = ['secret_key' => 'cdp_sk_…', 'identity_key' => 'cdp_ik_…']; 17 15 18 public static function register(): void 16 19 { … … 75 78 $field('write_key', ['type' => 'text', 'title' => __('Write key', 'onetrace-for-woocommerce'), 'placeholder' => 'cdp_wk_…', 'desc_tip' => __('For the tracker on the storefront.', 'onetrace-for-woocommerce')]), 76 79 $field('secret_key', ['type' => 'password', 'title' => __('Secret key', 'onetrace-for-woocommerce'), 'placeholder' => 'cdp_sk_…', 'desc_tip' => __('For orders, customers and the catalog; needs the products.write permission.', 'onetrace-for-woocommerce')]), 80 $field('identity_key', ['type' => 'password', 'title' => __('Identity key', 'onetrace-for-woocommerce'), 'placeholder' => 'cdp_ik_…', 'desc_tip' => __('Signs the id of the signed-in customer for the tracker, so OneTrace trusts it when the project requires signed user ids. It is in OneTrace → Site → Connection → Server.', 'onetrace-for-woocommerce')]), 77 81 ['type' => 'sectionend', 'id' => 'onetrace_connection'], 78 82 … … 151 155 } 152 156 153 // The secret key is never printed back: an empty field keeps the stored one. 154 if (($field['id'] ?? '') === Settings::OPTION . '[secret_key]') { 155 $field['placeholder'] = (string) $field['value'] !== '' ? __('Saved — enter a new key to replace it', 'onetrace-for-woocommerce') : 'cdp_sk_…'; 156 $field['value'] = ''; 157 // The secret and identity keys are never printed back: an empty field keeps the stored one. 158 foreach (self::HIDDEN_KEYS as $key => $placeholder) { 159 if (($field['id'] ?? '') === Settings::OPTION . '[' . $key . ']') { 160 $field['placeholder'] = (string) $field['value'] !== '' ? __('Saved — enter a new key to replace it', 'onetrace-for-woocommerce') : $placeholder; 161 $field['value'] = ''; 162 } 157 163 } 158 164 … … 170 176 $settings = get_option(Settings::OPTION, []); 171 177 172 // An empty password field keeps the stored secret key. 173 if (\is_array($settings) && \is_array($previous) && ($settings['secret_key'] ?? '') === '' && ($previous['secret_key'] ?? '') !== '') { 174 $settings['secret_key'] = $previous['secret_key']; 175 update_option(Settings::OPTION, $settings); 178 // An empty password field keeps the stored key. 179 if (\is_array($settings) && \is_array($previous)) { 180 $kept = $settings; 181 182 foreach (array_keys(self::HIDDEN_KEYS) as $key) { 183 if (($settings[$key] ?? '') === '' && ($previous[$key] ?? '') !== '') { 184 $kept[$key] = $previous[$key]; 185 } 186 } 187 188 if ($kept !== $settings) { 189 update_option(Settings::OPTION, $kept); 190 } 176 191 } 177 192 -
onetrace-for-woocommerce/trunk/src/Connection.php
r3755877 r3778798 30 30 $options = [ 31 31 $write ? 'write_key' : 'secret_key' => (string) Settings::get($write ? 'write_key' : 'secret_key') ?: null, 32 'identity_key' => (string) Settings::get('identity_key') ?: null, 32 33 'timeout' => $timeouts[0], 33 34 'connect_timeout' => $timeouts[1], … … 47 48 48 49 return self::$clients[$key]; 50 } 51 52 /** 53 * The signature of the signed-in customer's id for the tracker (identity key); null without the key. 54 */ 55 public static function userHash(string $userId): ?string 56 { 57 return $userId !== '' && (string) Settings::get('identity_key') !== '' ? self::client('write')->userHash($userId) : null; 49 58 } 50 59 -
onetrace-for-woocommerce/trunk/src/Settings.php
r3763672 r3778798 7 7 /** 8 8 * Plugin settings: the option "onetrace_settings", the keys may also come from wp-config.php constants 9 * ONETRACE_URL, ONETRACE_WRITE_KEY and ONETRACE_SECRET_KEY (then they are not stored in the database). 9 * ONETRACE_URL, ONETRACE_WRITE_KEY, ONETRACE_SECRET_KEY and ONETRACE_IDENTITY_KEY (then they are not stored in the 10 * database). 10 11 */ 11 12 final class Settings 12 13 { 13 14 public const OPTION = 'onetrace_settings'; 15 16 /** Settings that may come from wp-config.php constants. */ 17 private const CONSTANTS = ['url' => 'ONETRACE_URL', 'write_key' => 'ONETRACE_WRITE_KEY', 'secret_key' => 'ONETRACE_SECRET_KEY', 'identity_key' => 'ONETRACE_IDENTITY_KEY']; 14 18 15 19 /** @var array<string, mixed> */ … … 18 22 'write_key' => '', 19 23 'secret_key' => '', 24 'identity_key' => '', 20 25 'tracker' => 'yes', 21 26 'wait_for_consent' => 'yes', … … 50 55 public static function get(string $key) 51 56 { 52 $constant = ['url' => 'ONETRACE_URL', 'write_key' => 'ONETRACE_WRITE_KEY', 'secret_key' => 'ONETRACE_SECRET_KEY'][$key] ?? null;57 $constant = self::CONSTANTS[$key] ?? null; 53 58 54 59 if ($constant !== null && \defined($constant) && \is_string(\constant($constant)) && \constant($constant) !== '') { … … 68 73 public static function fromConstant(string $key): bool 69 74 { 70 $constant = ['url' => 'ONETRACE_URL', 'write_key' => 'ONETRACE_WRITE_KEY', 'secret_key' => 'ONETRACE_SECRET_KEY'][$key] ?? null;75 $constant = self::CONSTANTS[$key] ?? null; 71 76 72 77 return $constant !== null && \defined($constant); -
onetrace-for-woocommerce/trunk/src/Storefront.php
r3763672 r3778798 79 79 . "(function(d,u,s,load){load=function(){if(s)return;s=d.createElement('script');s.async=1;s.src=u;d.head.appendChild(s)};%s})(document,%s);\n" 80 80 . "cdp.init(%s, %s);\ncdp.page();\n" 81 // The browser follows the signed-in customer: identify after login, reset after logout. 82 . "(function(u,k){try{k=localStorage.getItem('cdp_uid')}catch(e){}if(u&&k!==u)cdp.identify(u);else if(!u&&k)cdp.reset()})(%s);", 81 // The browser follows the signed-in customer: identify after login (and with a new signature of the id), 82 // reset after logout. 83 . "(function(u,h,k,g){try{k=localStorage.getItem('cdp_uid');g=localStorage.getItem('cdp_uhash')}catch(e){}if(u&&(k!==u||h&&g!==h))cdp.identify(u,{},h?{userHash:h}:{});else if(!u&&k)cdp.reset()})(%s,%s);", 83 84 wp_json_encode(self::STUB_METHODS), 84 85 $waits … … 88 89 wp_json_encode((string) Settings::get('write_key')), 89 90 wp_json_encode($options, JSON_UNESCAPED_SLASHES), 90 wp_json_encode($userId) 91 wp_json_encode($userId), 92 wp_json_encode(Connection::userHash($userId)) 91 93 ); 92 94 -
onetrace-for-woocommerce/trunk/vendor/onetrace-php/src/Client.php
r3763672 r3778798 36 36 * 37 37 * $client = new OneTrace\WooCommerce\Vendor\OneTrace\Client('https://cdp.onetrace.pro', [ 38 * 'write_key' => getenv('ONETRACE_WRITE_KEY'), // events 39 * 'secret_key' => getenv('ONETRACE_SECRET_KEY'), // everything else 38 * 'write_key' => getenv('ONETRACE_WRITE_KEY'), // recommendations, widgets, search 39 * 'secret_key' => getenv('ONETRACE_SECRET_KEY'), // events and everything else 40 * 'identity_key' => getenv('ONETRACE_IDENTITY_KEY'), // signs user ids for the tracker 40 41 * ]); 41 42 * $client->events()->track(['userId' => '42', 'event' => 'order_completed', 'properties' => ['amount' => 9980]]); 43 * $hash = $client->userHash('42'); // cdp.identify('42', {}, { userHash: hash }) on the page 42 44 * 43 45 * The address is the platform domain of your account (a white-label brand has its own); "/api/v1" is added … … 46 48 final class Client 47 49 { 48 public const VERSION = '1.1 6.0';50 public const VERSION = '1.17.0'; 49 51 50 52 /** … … 174 176 * write_key?: string|null, 175 177 * secret_key?: string|null, 178 * identity_key?: string|null, 176 179 * timeout?: float, 177 180 * connect_timeout?: float, … … 186 189 * sleep?: callable(float): void, 187 190 * } $options 188 * - write_key: cdp_wk_… for events, recommendations, widgets, product search and Web Push; 189 * - secret_key: cdp_sk_… for everything (never expose it to browsers); 191 * - write_key: cdp_wk_… for recommendations, widgets, product search and Web Push, events when there is no 192 * secret key; 193 * - secret_key: cdp_sk_… for everything, events included (never expose it to browsers); 194 * - identity_key: cdp_ik_…, the identity key of the project (Website → Connection → Server) for userHash() 195 * and signed user ids of events sent with the write key (never expose it to browsers); 190 196 * - timeout / connect_timeout: seconds for the built-in cURL transport (10 and 5 by default); 191 197 * - max_retries: retries of network errors, 429, 5xx (3 by default, 0 disables); … … 214 220 throw new \InvalidArgumentException('Pass "write_key", "secret_key" or both.'); 215 221 } 222 223 $identityKey = self::key($options['identity_key'] ?? null, 'The identity key must be a string.'); 216 224 217 225 $userAgent = sprintf('onetrace-php/%s PHP/%s', self::VERSION, PHP_VERSION); … … 230 238 $userAgent, 231 239 $options['sleep'] ?? null, 232 isset($options['language']) && $options['language'] !== '' ? $options['language'] : 'en' 240 isset($options['language']) && $options['language'] !== '' ? $options['language'] : 'en', 241 $identityKey 233 242 ); 234 243 } … … 388 397 /** @var array{type: string, name: string, project: array<string, mixed>, scopes: list<string>} */ 389 398 return $this->requester->request('GET', '/key', ['auth' => $key === 'write' ? Requester::AUTH_WRITE : Requester::AUTH_SECRET]); 399 } 400 401 /** 402 * The signature of a signed-in user's id for the tracker: HMAC-SHA256 of the id with the identity key, hex. 403 * Print it into the page — cdp.identify(userId, traits, { userHash }) — so that the platform trusts the user id 404 * of the browser (required when the project turns on "Require signature"). Null when the client has no 405 * "identity_key". 406 * 407 * @param string|int $userId 408 */ 409 public function userHash($userId): ?string 410 { 411 $userId = (string) $userId; 412 413 return $userId === '' ? null : $this->requester->userHash($userId); 390 414 } 391 415 … … 470 494 * @param mixed $key 471 495 */ 472 private static function key($key ): ?string496 private static function key($key, string $error = 'API keys must be strings.'): ?string 473 497 { 474 498 if ($key === null || $key === false || $key === '') { … … 477 501 478 502 if (!\is_string($key)) { 479 throw new \InvalidArgumentException('API keys must be strings.'); 480 } 481 482 return trim($key); 503 throw new \InvalidArgumentException($error); 504 } 505 506 $key = trim($key); 507 508 return $key === '' ? null : $key; 483 509 } 484 510 } -
onetrace-for-woocommerce/trunk/vendor/onetrace-php/src/Http/Requester.php
r3761605 r3778798 24 24 public const AUTH_WRITE = 'write'; 25 25 public const AUTH_SECRET = 'secret'; 26 /** The secret key, or the write key when there is no secret key: events sent by a server. */ 27 public const AUTH_SERVER = 'server'; 26 28 27 29 private const MAX_RETRY_AFTER = 60.0; … … 32 34 33 35 private ?string $secretKey; 36 37 private ?string $identityKey; 34 38 35 39 private Transport $transport; … … 58 62 string $userAgent, 59 63 ?callable $sleep = null, 60 string $language = 'en' 64 string $language = 'en', 65 ?string $identityKey = null 61 66 ) { 62 67 $this->baseUrl = $baseUrl; 63 68 $this->writeKey = $writeKey; 64 69 $this->secretKey = $secretKey; 70 $this->identityKey = $identityKey; 65 71 $this->transport = $transport; 66 72 $this->maxRetries = max(0, $maxRetries); … … 80 86 * idempotent?: bool, 81 87 * idempotency_key?: string|null, 82 * } $options auth: AUTH_WRITE accepts either key (write key preferred), AUTH_SECRET needs the secret key; 88 * } $options auth: AUTH_WRITE accepts either key (write key preferred), AUTH_SERVER — either key (secret key 89 * preferred), AUTH_SECRET needs the secret key; 83 90 * idempotent: send an Idempotency-Key header (generated unless given) 84 91 * … … 128 135 { 129 136 return $this->baseUrl; 137 } 138 139 /** 140 * Whether a request with this auth goes with the write key. 141 */ 142 public function usesWriteKey(string $auth): bool 143 { 144 return $this->writeKey !== null && ($auth === self::AUTH_WRITE || $this->secretKey === null); 145 } 146 147 /** 148 * The signature of a user id: HMAC-SHA256 with the identity key, hex; null without the identity key. 149 */ 150 public function userHash(string $userId): ?string 151 { 152 return $this->identityKey === null ? null : hash_hmac('sha256', $userId, $this->identityKey); 130 153 } 131 154 … … 192 215 } 193 216 194 throw new ConfigurationException($auth === self::AUTH_WRITE 217 if ($auth === self::AUTH_SERVER && $this->writeKey !== null) { 218 return $this->writeKey; 219 } 220 221 throw new ConfigurationException($auth !== self::AUTH_SECRET 195 222 ? 'Pass "write_key" or "secret_key" to the client to send events.' 196 223 : 'This method needs a secret key: pass "secret_key" to the client.'); -
onetrace-for-woocommerce/trunk/vendor/onetrace-php/src/Resource/Events.php
r3738426 r3778798 12 12 13 13 /** 14 * Event ingestion: track, identify, page, alias and batches. Works with a write key or a secret key. 14 * Event ingestion: track, identify, page, alias and batches. Works with a secret key or a write key; the secret key 15 * is used when both are given (events of the write key do not award loyalty points, and their userId is dropped when 16 * the project requires signed user ids). With only the write key, messages with a userId get its "userHash" 17 * signature from the client's identity key. 15 18 * 16 19 * Each message gets a messageId (repeats with the same id within 24 hours are dropped by the server, so retries … … 128 131 $result = ['accepted' => 0, 'duplicates' => 0]; 129 132 130 foreach (self::chunks($ messages) as $chunk) {133 foreach (self::chunks($this->sign($messages)) as $chunk) { 131 134 $response = $this->requester->request('POST', '/batch', ['auth' => self::auth($chunk), 'json' => ['batch' => $chunk]]); 132 135 $result['accepted'] += self::count($response['accepted'] ?? 0); … … 201 204 private function send(string $type, array $message): array 202 205 { 203 return $this->requester->request('POST', '/' . $type, ['auth' => self::auth([$message]), 'json' => self::prepare($type, $message)]);204 } 205 206 /** 207 * Consents in identify are accepted only with the secret key; other messages prefer the write key.206 return $this->requester->request('POST', '/' . $type, ['auth' => self::auth([$message]), 'json' => $this->sign([self::prepare($type, $message)])[0]]); 207 } 208 209 /** 210 * Consents in identify are accepted only with the secret key; other messages prefer it too. 208 211 * 209 212 * @param array<array<string, mixed>> $messages … … 217 220 } 218 221 219 return Requester::AUTH_WRITE; 222 return Requester::AUTH_SERVER; 223 } 224 225 /** 226 * Adds "userHash" to messages with a userId when they go with the write key and the identity key is set. 227 * 228 * @param list<array<string, mixed>> $messages 229 * 230 * @return list<array<string, mixed>> 231 */ 232 private function sign(array $messages): array 233 { 234 if (!$this->requester->usesWriteKey(Requester::AUTH_SERVER)) { 235 return $messages; 236 } 237 238 foreach ($messages as $index => $message) { 239 $userId = $message['userId'] ?? null; 240 241 if ((\is_string($userId) || \is_int($userId)) && (string) $userId !== '' && !isset($message['userHash'])) { 242 $hash = $this->requester->userHash((string) $userId); 243 244 if ($hash === null) { 245 return $messages; 246 } 247 248 $messages[$index]['userHash'] = $hash; 249 } 250 } 251 252 return $messages; 220 253 } 221 254 -
onetrace-for-woocommerce/trunk/vendor/onetrace-php/src/Resource/Push.php
r3738426 r3778798 9 9 /** 10 10 * Web Push subscriptions collected outside of the JS tracker (for example in a native wrapper). 11 * Works with a write key or a secret key. 11 * Works with a write key or a secret key; with the write key a userId gets its "userHash" signature from the 12 * client's identity key. 12 13 */ 13 14 final class Push extends Resource … … 26 27 * Stores a browser subscription (PushSubscription.toJSON()) and links it to the visitor. 27 28 * 28 * @param array<string, mixed> $subscription endpoint and keys29 * @param array{anonymousId?: string, userId?: string, publicKey?: string} $params29 * @param array<string, mixed> $subscription endpoint and keys 30 * @param array{anonymousId?: string, userId?: string, userHash?: string, publicKey?: string} $params 30 31 * 31 32 * @return array<string, mixed> subscription_id … … 33 34 public function subscribe(array $subscription, array $params = []): array 34 35 { 36 if (isset($params['userId']) && $params['userId'] !== '' && !isset($params['userHash']) && $this->requester->usesWriteKey(Requester::AUTH_WRITE)) { 37 $hash = $this->requester->userHash($params['userId']); 38 39 if ($hash !== null) { 40 $params['userHash'] = $hash; 41 } 42 } 43 35 44 return $this->requester->request('POST', '/push/subscriptions', [ 36 45 'auth' => Requester::AUTH_WRITE,
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)