Shakira announces pregnancy, cancels festival appearance