{"id":809,"date":"2019-08-22T05:31:25","date_gmt":"2019-08-22T05:31:25","guid":{"rendered":"https:\/\/masonslivinglanguages.com\/?page_id=809"},"modified":"2026-10-04T22:44:42","modified_gmt":"2026-10-04T22:44:42","slug":"french-curriculum","status":"publish","type":"page","link":"https:\/\/masonslivinglanguages.com\/?page_id=809","title":{"rendered":"French Curriculum"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>&#8220;Already a better French lesson today! I downloaded and printed and started a lesson immediately and it went great. So far we&#8217;ve liked what we were doing in our two weeks of school. We did lesson 1 and 2 since I have an older student. I think I will add in some grammar lessons and it should all work out for what he needs. Thank you!!&#8221; ~Cassie<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&#8220;I have been using your term 1 French curriculum with a small homeschool group this year and we have absolutely LOVED it! It&#8217;s been so exciting to see them just love the lessons and become so confident to speak and sing in french. Thank you so much!<\/em>&#8221; ~D<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"700\" data-attachment-id=\"612\" data-permalink=\"https:\/\/masonslivinglanguages.com\/?attachment_id=612\" data-orig-file=\"https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?fit=960%2C960&amp;ssl=1\" data-orig-size=\"960,960\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"21077529_1914238468824381_3609346516241797385_n\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?fit=700%2C700&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?resize=700%2C700&#038;ssl=1\" alt=\"\" class=\"wp-image-612\" srcset=\"https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?resize=700%2C700&amp;ssl=1 700w, https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?resize=768%2C768&amp;ssl=1 768w, https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2017\/10\/21077529_1914238468824381_3609346516241797385_n.jpg?w=960&amp;ssl=1 960w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">I love languages. I love French especially because of my mother, Jill. In her younger years she was a brilliant linguist. Because of her gift, she was part of the first class of women ever invited to take Russian classes at the then men&#8217;s private school, Phillips Exeter Academy. Sadly, this gift of hers was never fully realized before mental illness robbed her of her mind as it was. Though my mother wasn&#8217;t able to give me all that she wanted, she did give me a love for languages and if this work might further that love in your family, I give God all the glory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In her honor, I have created a complete French curriculum for 1B with audio, pictures and flashcards.  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Weekly lessons include poetry, story, vocabulary and song.  <\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"720\" data-attachment-id=\"811\" data-permalink=\"https:\/\/masonslivinglanguages.com\/?attachment_id=811\" data-orig-file=\"https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2019\/08\/momandme.jpg?fit=720%2C720&amp;ssl=1\" data-orig-size=\"720,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"momandme\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2019\/08\/momandme.jpg?fit=700%2C700&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.masonslivinglanguages.com\/wp-content\/uploads\/2019\/08\/momandme.jpg?fit=700%2C700\" alt=\"\" class=\"wp-image-811\" style=\"width:840px;height:auto\" srcset=\"https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2019\/08\/momandme.jpg?w=720&amp;ssl=1 720w, https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2019\/08\/momandme.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2019\/08\/momandme.jpg?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/masonslivinglanguages.com\/wp-content\/uploads\/2019\/08\/momandme.jpg?resize=700%2C700&amp;ssl=1 700w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you are interested, please use the form below.  I will then send an invoice to you through PayPal and once paid, I will forward you all files. God bless.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>French 1B Curriculum<\/strong> &#8211; $75.00<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n<div class=\"swpm-payment-button\">    <div id=\"swpm-button-wrapper-952\" class=\"swpm-button-wrapper swpm-paypal-buy-now-button-wrapper\">\n\n    <!-- PayPal button container where the button will be rendered -->\n    <div id=\"swpm_paypal_button_0\" style=\"width: 300px;\"><\/div>\n    <!-- Some additiona hidden input fields -->\n    <input type=\"hidden\" id=\"swpm_paypal_button_0-custom-field\" name=\"custom\" value=\"subsc_ref=2&amp;user_ip=216.73.216.244\">\n\n    <script type=\"text\/javascript\">\n        document.addEventListener( \"swpm_paypal_sdk_loaded\", function() { \n            \/\/Anything that goes here will only be executed after the PayPal SDK is loaded.\n            console.log('PayPal JS SDK is loaded.');\n\n            var js_currency_code = 'USD';\n            var js_payment_amount = 75.00;\n            var js_quantity = 1;\n            var js_digital_goods_enabled = 1;\n\n            const paypalButtonsComponent = paypal.Buttons({\n                \/\/ optional styling for buttons\n                \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/customize\/buttons-style-guide\/\n                style: {\n                    color: 'blue',\n                    shape: 'rect',\n                    height: 35,\n                    label: 'buynow',\n                    layout: 'vertical',\n                },\n\n                \/\/ Setup the transaction.\n                createOrder: async function() {\n                    \/\/ Create the order in PayPal using the PayPal API.\n                    \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/integrate\/\n                    \/\/ The server-side Create Order API is used to generate the Order. Then the Order-ID is returned.                    \n                    console.log('Setting up the AJAX request for create-order call.');\n                    let pp_bn_data = {};\n                    pp_bn_data.button_id = '952';\n                    pp_bn_data.on_page_button_id = 'swpm_paypal_button_0';\n                    pp_bn_data.item_name = 'French 1B Curriculum';\n                    let post_data = 'action=swpm_pp_create_order&data=' + JSON.stringify(pp_bn_data) + '&_wpnonce=5e0395eb77';\n                    try {\n                        \/\/ Using fetch for AJAX request. This is supported in all modern browsers.\n                        const response = await fetch(\"https:\/\/masonslivinglanguages.com\/wp-admin\/admin-ajax.php\", {\n                            method: \"post\",\n                            headers: {\n                                'Content-Type': 'application\/x-www-form-urlencoded'\n                            },\n                            body: post_data\n                        });\n\n                        const response_data = await response.json();\n\n                        if (response_data.order_id) {\n                            console.log('Create-order API call to PayPal completed successfully.');\n                            \/\/If we need to see the order details, uncomment the following line.\n                            \/\/const order_data = response_data.order_data;\n                            \/\/console.log('Order data: ' + JSON.stringify(order_data));\n                            return response_data.order_id;\n                        } else {\n                            const error_message = JSON.stringify(response_data);\n                            console.error('Error occurred during the create-order API call to PayPal. ' + error_message);\n                            throw new Error(error_message);\n                        }\n                    } catch (error) {\n                        console.error(error);\n                        alert('Could not initiate PayPal Checkout...\\n\\n' + JSON.stringify(error));\n                    }\n                },\n    \n                \/\/ handle the onApprove event\n                onApprove: async function(data, actions) {\n                    console.log('Successfully created a transaction.');\n\n                    \/\/Show the spinner while we process this transaction.\n                    const pp_button_container = document.getElementById('swpm_paypal_button_0');\n                    const pp_button_container_wrapper = document.getElementById('swpm-button-wrapper-952');\n                    const pp_button_spinner_container = pp_button_container_wrapper.querySelector('.swpm-pp-button-spinner-container');\n                    pp_button_container.style.display = 'none'; \/\/Hide the buttons\n                    pp_button_spinner_container.style.display = 'inline-block'; \/\/Show the spinner.\n\n                    \/\/ Capture the order in PayPal using the PayPal API.\n                    \/\/ https:\/\/developer.paypal.com\/docs\/checkout\/standard\/integrate\/\n                    \/\/ The server-side capture-order API is used. Then the Capture-ID is returned.\n                    console.log('Setting up the AJAX request for capture-order call.');\n                    let pp_bn_data = {};\n                    pp_bn_data.order_id = data.orderID;\n                    pp_bn_data.button_id = '952';\n                    pp_bn_data.on_page_button_id = 'swpm_paypal_button_0';\n                    pp_bn_data.item_name = 'French 1B Curriculum';\n\n                    \/\/Add custom_field data. It is important to encode the custom_field data so it doesn't mess up the data with & character.\n                    const custom_data = document.getElementById('swpm_paypal_button_0-custom-field').value;\n                    pp_bn_data.custom_field = encodeURIComponent(custom_data);\n                    \n                    const post_data = new URLSearchParams({\n                        action: 'swpm_pp_capture_order',\n                        data: JSON.stringify(pp_bn_data),\n                        _wpnonce: '5e0395eb77',\n                    }).toString();\n                    \n                    try {\n                        const response = await fetch(\"https:\/\/masonslivinglanguages.com\/wp-admin\/admin-ajax.php\", {\n                            method: \"post\",\n                            headers: {\n                                'Content-Type': 'application\/x-www-form-urlencoded'\n                            },\n                            body: post_data\n                        });\n\n                        const response_data = await response.json();\n                        const txn_data = response_data.txn_data;\n                        const error_detail = txn_data?.details?.[0];\n                        const error_msg = response_data.error_msg;\/\/Our custom error message.\n                        \/\/ Three cases to handle:\n                        \/\/ (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart()\n                        \/\/ (2) Other non-recoverable errors -> Show a failure message\n                        \/\/ (3) Successful transaction -> Show confirmation or thank you message\n\n                        if (response_data.capture_id) {\n                            \/\/ Successful transaction -> Show confirmation or thank you message\n                            console.log('Capture-order API call to PayPal completed successfully.');\n\n                            \/\/Redirect to the Thank you page or Registration page URL if it is set.\n                            const return_url = response_data.redirect_url || '';\n                            if( return_url ){\n                                \/\/redirect to the URL.\n                                console.log('Redirecting to the Thank you page URL: ' + return_url);\n                                window.location.href = return_url;\n                                return;\n                            } else {\n                                \/\/No return URL is set. Just show a success message.\n                                \/\/Important Note: any alert message will block the normal PayPal popup window flow. So we want to show the message on the page instead of using alert.\n                                txn_success_msg = 'Transaction completed successfully!';\n                                const swpm_btn_wrapper_div = document.getElementById('swpm-button-wrapper-952');\n                                if (swpm_btn_wrapper_div) {\n                                    \/\/ Remove any previous message if it exists\n                                    const old_msg_div = swpm_btn_wrapper_div.querySelector('.swpm-ppcp-txn-success-message');\n                                    if (old_msg_div) old_msg_div.remove();\n\n                                    \/\/ Create new message div\n                                    const new_msg_div = document.createElement('div');\n                                    new_msg_div.className = 'swpm-ppcp-txn-success-message';\n                                    new_msg_div.textContent = txn_success_msg;\n\n                                    \/\/Insert the message div before the button.\n                                    const firstChild = swpm_btn_wrapper_div.firstChild;\n                                    swpm_btn_wrapper_div.insertBefore(new_msg_div, firstChild);\n                                }\n                            }\n\n                        } else if (error_detail?.issue === \"INSTRUMENT_DECLINED\") {\n                            \/\/ Recoverable INSTRUMENT_DECLINED -> call actions.restart()\n                            console.log('Recoverable INSTRUMENT_DECLINED error. Calling actions.restart()');\n                            return actions.restart();\n                        } else if ( error_msg && error_msg.trim() !== '' ) {\n                            \/\/Our custom error message from the server.\n                            console.error('Error occurred during PayPal checkout process.');\n                            console.error( error_msg );\n                            alert( error_msg );\n                        } else {\n                            \/\/ Other non-recoverable errors -> Show a failure message\n                            console.error('Non-recoverable error occurred during PayPal checkout process.');\n                            console.error( error_detail );\n                            \/\/alert('Error occurred with the transaction. Enable debug logging to get more details.\\n\\n' + JSON.stringify(error_detail));\n                        }\n\n                        \/\/Return the button and the spinner back to their orignal display state.\n                        pp_button_container.style.display = 'block'; \/\/ Show the buttons\n                        pp_button_spinner_container.style.display = 'none'; \/\/ Hide the spinner\n\n                    } catch (error) {\n                        console.error(error);\n                        alert('PayPal returned an error! Transaction could not be processed. Enable the debug logging feature to get more details...\\n\\n' + JSON.stringify(error));\n                    }\n                },\n    \n                \/\/ handle unrecoverable errors\n                onError: function(err) {\n                    console.error('An error prevented the user from checking out with PayPal. ' + JSON.stringify(err));\n                    alert( 'Error occurred during PayPal checkout process.\\n\\n' + JSON.stringify(err) );\n                },\n\n                \/\/ handle onCancel event\n                onCancel: function(data) {\n                    console.log('Checkout operation cancelled by the customer.');\n                    \/\/Return to the parent page which the button does by default.\n                }\n            });\n    \n            paypalButtonsComponent\n                .render('#swpm_paypal_button_0')\n                .catch((err) => {\n                    console.error('PayPal Buttons failed to render');\n                });\n\n        });\n    <\/script>\n    <style>\n        @keyframes swpm-pp-button-spinner {\n            to {transform: rotate(360deg);}\n        }\n        .swpm-pp-button-spinner {\n            margin: 0 auto;\n            text-indent: -9999px;\n            vertical-align: middle;\n            box-sizing: border-box;\n            position: relative;\n            width: 60px;\n            height: 60px;\n            border-radius: 50%;\n            border: 5px solid #ccc;\n            border-top-color: #0070ba;\n            animation: swpm-pp-button-spinner .6s linear infinite;\n        }\n        .swpm-pp-button-spinner-container {\n            width: 100%;\n            text-align: center;\n            margin-top:10px;\n            display: none;\n        }\n    <\/style>\n    <div class=\"swpm-pp-button-spinner-container\">\n        <div class=\"swpm-pp-button-spinner\"><\/div>\n    <\/div>\n    <\/div><!-- end of .swpm-button-wrapper -->\n    <\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;Already a better French lesson today! I downloaded and printed and started a lesson immediately and it went great. So far we&#8217;ve liked what we were doing in our two weeks of school. We did lesson 1 and 2 since I have an older student. I think I will add in some grammar lessons and&hellip; <a class=\"more-link\" href=\"https:\/\/masonslivinglanguages.com\/?page_id=809\">Read More <span class=\"screen-reader-text\">French Curriculum<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":746,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"nosidebar-page.php","meta":{"footnotes":""},"class_list":["post-809","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/P8TsXj-d3","_links":{"self":[{"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=\/wp\/v2\/pages\/809","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=809"}],"version-history":[{"count":10,"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=\/wp\/v2\/pages\/809\/revisions"}],"predecessor-version":[{"id":953,"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=\/wp\/v2\/pages\/809\/revisions\/953"}],"up":[{"embeddable":true,"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=\/wp\/v2\/pages\/746"}],"wp:attachment":[{"href":"https:\/\/masonslivinglanguages.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}